信号通讯编程
编写两个应用程序,利用两个进程进行信号通信
1、信号的概念:是一种进程间通信机制,它给应用程序提供一种异步的软件中断,使应用程序有机会接受其他程序或终端发送的命令(即信号)。应用程序收到信号后,有三种处理方式:忽略,默认,或捕捉。进程收到一个信号后,会检查对该信号的处理机制。如果是SIG_IGN,就会忽略该信号,如果是SIG_DFT,则会 采用系统默认的处理动作,通常是终止进程或忽略该信号;如果给该信号指定了一个处理函数(捕捉),则会中断当前进程正在执行的任务,转而去执行该信号的处理函数,返回后再继续执行被中断的任务。
2、通过kill -l命令我们可以查看到Linux支持的信号列表。位于/usr/include/asm/signal.h
SIGTST 20 停止进程的运行,但该信号可以被处理和忽略,用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号
通过命令kill -[-s signal |-signal] pid可以向进程号为pid的进程发送signal信号(可以是信号宏名或者对应编号)
3、传送信号给指定的进程----kill
头文件:#include<signal.h>,#include<sys/types.h>
原型:int kill(pid_t pid,int sig)
参数说明:sig:设置信号处理函数所依赖的信号编号,pid:接收信号的进程号,pid>0将信号传给进程标识码为pid的进程;pid=0将信号传给和目前进程相同进程组的所有进程。pid<0将信号传给进程组识别码为pid绝对值的所有进程。
返回值:执行成功则返回0,失败则返回-1.
注意可以在命令行输入以下命令到相应进程7651:kill -n SIGINT 7651
waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。http://baike.baidu.com/link?url=qfLQVjdillsIymnAx3Om5pvb72o5eXmzEf_qqZ3vB5yv5Le34eZoTo_RGW08LF5MvA2KmwL2EtiKaOmXNSAdta
信号处理--signal
头文件:#include<signal.h>
函数原型:void (*signal(int signum,void(*handler)(int)))(int);
或者typedef void(*sig_t)(int);sig_t signal(int signum.sig_t handler);
参数说明:signum:设置信号处理函数所依赖的信号编号
handler:信号处理函数
如果参数handler不是函数指针,则必须是下列两个常数之一:SIG_IGN:忽略参数signum指定的信号。SIG_DFL:将参数signum指定的信号重设为预设的信号处理方式。
返回值:返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。
让进程暂停知道信号出现----pause
头文件:#include<unistd.h>
函数原型:int pause(void);
参数说明:无
返回值:只返回-1.
send_signal.c
函数atoi()是把一个字符串转换为一个整数!!!
receive_signal.c
先执行:
然后执行:
最后执行:
结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】