当前位置: 技术问答>linux和unix
信号屏蔽
来源: 互联网 发布时间:2016-08-03
本文导语: 本帖最后由 SARA520 于 2010-02-05 15:55:42 编辑 #include #include #include #include void sigusr1_handler(int signo) { printf("catch SIGUSR1n"); } int main(void) { sigset_t set; if(SIG_ERR == signal(SIGUSR1,sigusr1_handler)) { perror("fail signal"); exit(1); } if(-1 =...
#include
#include
#include
#include
void sigusr1_handler(int signo)
{
printf("catch SIGUSR1n");
}
int main(void)
{
sigset_t set;
if(SIG_ERR == signal(SIGUSR1,sigusr1_handler))
{
perror("fail signal");
exit(1);
}
if(-1 == sigemptyset(&set)) //清空信号集
{
perror("fail sigemptyset");
exit(1);
}
if(-1 == sigaddset(&set, SIGUSR1-1)) //往信号集中添加SIGUSR1
{
perror("fail sigaddset");
exit(1);
}
if(-1 == sigprocmask(SIG_BLOCK, &set, NULL)) //屏蔽set中指定的信号
{
perror("fail sigprocmask block");
exit(1);
}
printf("SIGUSR1信号已经屏蔽,进程ID = %dn", getpid());
sleep(20);
//在此sleep期间为何我用kill -SIGUSR1 ID,进程仍然可以捕捉到该信号
if(-1 == sigprocmask(SIG_UNBLOCK, &set, NULL)) //删除对set中指定信号的屏蔽
{
perror("fail sigprocmask unblock");
exit(1);
}
printf("SIGUSR1信号的屏蔽已经删除n");
sleep(20);
exit(0);
}
第一个sleep那里,为何屏蔽了信号,仍然能够捕捉到信号,是我漏了什么么???
谢谢
|
这个
SIGUSR1-1
SIGUSR1-1
|
如楼上所说:
SIGUSR1 - 1
SIGUSR1 - 1