进程间通信——信号
Posted it8343
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程间通信——信号相关的知识,希望对你有一定的参考价值。
程序接受到信号以后,会做出相应的处理。代码如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<signal.h> 4 #include<unistd.h> 5 void fun()//改变段错误的显示内容 6 { 7 int n; 8 alarm(10);// 添加一个定时器信号,10秒后触发 9 for(n=0;n<100;n++) 10 { 11 printf("出现了核心的错误 "); 12 sleep(1); 13 } 14 exit(0); 15 } 16 17 void fun2()//使ctrl C不产生退出 18 { 19 } 20 21 int main() 22 { 23 signal(SIGSEGV,fun);//SIGSEGV是出现段错误的信号 24 signal(SIGINT,fun2);//SIGINT是ctrl C的退出信号 25 int *p; 26 *p=20;//野指针,产生段错误 27 }
结果如下:
出现了核心的错误
出现了核心的错误
出现了核心的错误
出现了核心的错误
出现了核心的错误
出现了核心的错误
出现了核心的错误
出现了核心的错误
出现了核心的错误
出现了核心的错误
闹钟
以上程序检测到段错误,自动传递了11(SIGSEGV)信号给进程(捕捉信号),而alarm(int)是把SIGALRM信号传递给当前的进程,在某些时候,我们需要手动的给某个程序传递一些自定义的信号,此时该怎么处理呢?
#include<stdio.h> #include<signal.h> #include<stdlib.h> #include<unistd.h> void fun()// 设置信号 { printf("恭喜您,退出成功 "); exit(0); } int main() { signal(12,fun);//自定义12信号(10、12为用户自定义信号) while(1)//让进程不断输出“欢迎光临” { printf(" 欢迎光临 "); sleep(1); } return 0; }
结果:先运行程序,循环输出“欢迎光临”,再输入ps -aux查看所有进程,找到所运行的进程id
利用kill发送信号,把12这个讯号传递个5459这个进程,可以看到进程再收到讯号之后,做出了相应的动作
以上是关于进程间通信——信号的主要内容,如果未能解决你的问题,请参考以下文章