当前位置: 技术问答>linux和unix
很简单的问题:关于信号集的操作!
来源: 互联网 发布时间:2015-03-18
本文导语: 后面这个程序想实现每隔8秒查询是否有收到SIGUSR1信号并执行信号处理函数,结果 kill -sigusr1 xx 后只输出 catch "SIGUSR1",没有执行myhandler; 而且用kill发一次信号后,后面的循环中一直输出 catch "SIGUSR1",难道收到的...
后面这个程序想实现每隔8秒查询是否有收到SIGUSR1信号并执行信号处理函数,结果
kill -sigusr1 xx 后只输出 catch "SIGUSR1",没有执行myhandler;
而且用kill发一次信号后,后面的循环中一直输出 catch "SIGUSR1",难道收到的信号不会删除的吗,那要是
以后有同一个信号怎么办?
期盼大侠指点!
#include "signal.h"
#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"
void myhandler()
{
printf("~~~~~~HeHe!~~~~~~n");
return;
}
int main()
{
sigset_t nset,oset,pendset;
signal(SIGUSR1,myhandler);
while(1)
{
sigemptyset(&nset);
sigemptyset(&oset);
sigemptyset(&pendset);
sigaddset(&nset,SIGUSR1);
if(sigismember(&nset,SIGUSR1))
{
printf(""SIGUSR1" is blocked!n");
}
else
{
printf(""SIGUSR1" block errorn");
exit(0);
}
sigprocmask(SIG_SETMASK,&nset,&oset);
sleep(8);
sigpending(&pendset);
if(sigismember(&pendset,SIGUSR1))
{ sigprocmask(SIG_SETMASK,&oset,&nset);
printf("catch "SIGUSR1" n");
/*pause();*/
}
}
}
kill -sigusr1 xx 后只输出 catch "SIGUSR1",没有执行myhandler;
而且用kill发一次信号后,后面的循环中一直输出 catch "SIGUSR1",难道收到的信号不会删除的吗,那要是
以后有同一个信号怎么办?
期盼大侠指点!
#include "signal.h"
#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"
void myhandler()
{
printf("~~~~~~HeHe!~~~~~~n");
return;
}
int main()
{
sigset_t nset,oset,pendset;
signal(SIGUSR1,myhandler);
while(1)
{
sigemptyset(&nset);
sigemptyset(&oset);
sigemptyset(&pendset);
sigaddset(&nset,SIGUSR1);
if(sigismember(&nset,SIGUSR1))
{
printf(""SIGUSR1" is blocked!n");
}
else
{
printf(""SIGUSR1" block errorn");
exit(0);
}
sigprocmask(SIG_SETMASK,&nset,&oset);
sleep(8);
sigpending(&pendset);
if(sigismember(&pendset,SIGUSR1))
{ sigprocmask(SIG_SETMASK,&oset,&nset);
printf("catch "SIGUSR1" n");
/*pause();*/
}
}
}
|
你用sigaction是没有问题的
|
最好把你的注释也写上,让我们知道你的程序哪里是想作哪些功能的,还有这个程序的出错处理太少了,很多的地方应该加上出错处理!