本文共 1166 字,大约阅读时间需要 3 分钟。
信号通讯流程为:
①进程A/内核选择信号 ②发送信号 ③进程B接收信号并处理 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h,其中常见的信号有: ①SIGKILL:杀死进程 ②SIGSTOP:暂停进程 ③SIGCHLD:子进程停止或结束时用来通知父进程 常用到的函数有:原型:int kill(pid_t,int sig)头文件:功能:向进程发送信号,成功返回0,失败返回-1参数:pid的值有多种选择1. pid大于零时,pid是信号欲送往的进程的ID。2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。4. pid小于-1时,信号将送往以-pid为组标识的进程。sig:发送的信号
原型:typedef void (*sighandler_t)(int);/*函数指针*/ sighandler_t signal(int signum,sighandler_t handler)头文件:功能:设置信号处理方式,成功则返回处理函数的函数指针,失败返回SIG_ERR参数:signum:要处理的信号 handler:对应着signum信号的处理方式,可以取SIG_IGN,SIG_DFL或用户自定义的函数,其中SIG_IGN为忽略信号,SIG_DFL为交给Linux内核处理
原型:int pause(void)头文件:功能:等待信号
进程B接收信号并根据信号做出处理:
#include#include #include void func(int a){ printf("process received a signal\n"); }void main(){ signal(10,func); pause();}
进程A发送信号给进程B.由于发送信号kill需要知道进程B的id,所以在运行进程A的时候要输入进程B的id,而进程B的id可通过命令ps aux查看。
#include#include #include void main(int argc,char* argv[]){ pid_t pid; pid=atoi(argv[1]);/*将argv[1]由char型转化为int型*/ kill(pid,10);}
转载地址:http://tmigi.baihongyu.com/