当前位置: 技术问答>linux和unix
信号屏蔽问题(屏蔽不了信号)
来源: 互联网 发布时间:2017-01-07
本文导语: #include #include #include void sigusrl_handler(int signo) { printf("catch SIGUSR1n"); } 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...
#include
#include
#include
void sigusrl_handler(int signo)
{
printf("catch SIGUSR1n");
}
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("sucessn");
}
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
也就是说:根本就没有屏蔽信号,不知为什么?请高手指教!
#include
#include
void sigusrl_handler(int signo)
{
printf("catch SIGUSR1n");
}
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("sucessn");
}
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
也就是说:根本就没有屏蔽信号,不知为什么?请高手指教!
|
写错了两行代码:
sigaddset(&set,SIGUSR1-1);
if(sigismember(&set,SIGUSR1-1)==1)
应该是:
sigaddset(&set,SIGUSR1);
if(sigismember(&set,SIGUSR1)==1)
sigaddset(&set,SIGUSR1-1);
if(sigismember(&set,SIGUSR1-1)==1)
应该是:
sigaddset(&set,SIGUSR1);
if(sigismember(&set,SIGUSR1)==1)
|
为什吗是SIGUSR1-1
|
啥意思,我这里都屏蔽掉了。
给它发信号不理我的。
给它发信号不理我的。