信号为什么只处理一次
我的信号处理函数是这样的
- void sig_handle(int signum,siginfo_t *info,void *myact)
- {
- static int a=0;
- char *sh_addr;
- int shmid,i;
- struct blaster_data_pack bls_dat;
- struct sigaction act;
- act.sa_flags=SA_SIGINFO;
- act.sa_sigaction=sig_handle;
- if(sigaction(SIGUSR1,&act,NULL)<0){
- printf("install sigal errorn");
- }
- dbg("sigusr1_handlen");}
复制代码
每次收到信号后又重新安装信号。第一次信号安装是在其他函数,安装方式和这个一样。
但是在发信号时,只有第一次才会去处理,接下来就不会进入到信号处理函数里.为什么呢?如果不在处理信号时安装信号处理函数,也是只有第一次会去处理信号。
我发送信号的程序是:
- ppid=getppid();
- sigqueue(ppid,SIGUSR1,my_sigval);
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
主进程,信号接收端的代码
复制代码
发送信号端的代码
复制代码
把代码贴全,这样看不到问题
那是什么原因导致这个问题呢,帮我分析一下
信号注册成功后就不需要这个变量了,所以,无所谓是否局部变量
这是在栈上分配的。子函数退出以后还找得到吗?
sigqueue的返回值是多少?别的SIGNAL也是如此么?