信号屏蔽问题(屏蔽不了信号)

zhaozhigen 2011-10-16 03:05:26
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
void sigusrl_handler(int signo)
{
printf("catch SIGUSR1\n");
}
int main()
{
sigset_t set;
if(signal(SIGUSR1,sigusrl_handler)==SIG_ERR)
{
perror("can't set handler for SIGUSRL");

exit(1);
}
sigemptyset(&set);
sigaddset(&set,SIGUSR1-1);
if(sigismember(&set,SIGUSR1-1)==1)
{
printf("sucess\n");
}
if(sigprocmask(SIG_BLOCK,&set,NULL)==-1)
{
perror("fail to set signal-mask");
exit(1);
}
sleep(40);
return 0;
}
运行后:
sucess
当我在另一个终端里:
kill --USR1 8643
结果立即:
catch SIGUSR1

也就是说:根本就没有屏蔽信号,不知为什么?请高手指教!
...全文
50 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-10-16
  • 打赏
  • 举报
回复
啥意思,我这里都屏蔽掉了。

给它发信号不理我的。
qgw_2000 2011-10-16
  • 打赏
  • 举报
回复
写错了两行代码:
sigaddset(&set,SIGUSR1-1);
if(sigismember(&set,SIGUSR1-1)==1)
应该是:
sigaddset(&set,SIGUSR1);
if(sigismember(&set,SIGUSR1)==1)
qq120848369 2011-10-16
  • 打赏
  • 举报
回复
为什吗是SIGUSR1-1

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧