当前位置: 技术问答>linux和unix
sigpending函数失效问题?
来源: 互联网 发布时间:2016-01-31
本文导语: 代码如下: #include #include #include #include #include #include #include void sighandler(int signum); char buffer[200]; int main(void) { sigset_t blockset; ...
代码如下:
#include
#include
#include
#include
#include
#include
#include
void sighandler(int signum);
char buffer[200];
int main(void)
{
sigset_t blockset;
sigset_t pending;
int pendingcount;
strcpy(buffer,"Nonen");
printf("thread id is %d.n",getpid());
if(signal(SIGINT,&sighandler)==SIG_ERR)
{
printf("couldn't register SIGINTn");
}
if(signal(SIGTERM,&sighandler)==SIG_ERR)
{
printf("couldn't register SIGTERMn");
}
if(signal(SIGCONT,&sighandler)==SIG_ERR)
{
printf("couldn't register SIGCONTn");
}
sigemptyset(&blockset);
sigemptyset(&pending);
// sigaddset(&blockset,SIGINT);
sigaddset(&blockset,SIGTERM);
for(;;)
{
sigprocmask(SIG_BLOCK,&blockset,NULL);
fgets(buffer,sizeof(buffer),stdin);
printf("input %sn",buffer);
sigpending(&pending);
pendingcount=0;
if(sigismember(&pending,SIGINT))
{
pendingcount++;
printf("SIGINT IS MEMBER");
}
if(sigismember(&pending,SIGTERM))
{
pendingcount++;
printf("SIGTERM IS MEMBER");
}
if(pendingcount)
{
printf("there are %d signalsn",pendingcount);
}
sigprocmask(SIG_UNBLOCK,&blockset,NULL);
}
return 0;
}
void sighandler(int signumber)
{
printf("caught sight %d.n",signumber);
}
照理上应该会输出:"SIGTERM IS MEMBER" 但实际运行并没有输出,这是为什么啊?
#include
#include
#include
#include
#include
#include
#include
void sighandler(int signum);
char buffer[200];
int main(void)
{
sigset_t blockset;
sigset_t pending;
int pendingcount;
strcpy(buffer,"Nonen");
printf("thread id is %d.n",getpid());
if(signal(SIGINT,&sighandler)==SIG_ERR)
{
printf("couldn't register SIGINTn");
}
if(signal(SIGTERM,&sighandler)==SIG_ERR)
{
printf("couldn't register SIGTERMn");
}
if(signal(SIGCONT,&sighandler)==SIG_ERR)
{
printf("couldn't register SIGCONTn");
}
sigemptyset(&blockset);
sigemptyset(&pending);
// sigaddset(&blockset,SIGINT);
sigaddset(&blockset,SIGTERM);
for(;;)
{
sigprocmask(SIG_BLOCK,&blockset,NULL);
fgets(buffer,sizeof(buffer),stdin);
printf("input %sn",buffer);
sigpending(&pending);
pendingcount=0;
if(sigismember(&pending,SIGINT))
{
pendingcount++;
printf("SIGINT IS MEMBER");
}
if(sigismember(&pending,SIGTERM))
{
pendingcount++;
printf("SIGTERM IS MEMBER");
}
if(pendingcount)
{
printf("there are %d signalsn",pendingcount);
}
sigprocmask(SIG_UNBLOCK,&blockset,NULL);
}
return 0;
}
void sighandler(int signumber)
{
printf("caught sight %d.n",signumber);
}
照理上应该会输出:"SIGTERM IS MEMBER" 但实际运行并没有输出,这是为什么啊?
|
在其他终端执行kill pid //pid为你的程序的进程号
在你执行程序的终端敲回车就出来了
在你执行程序的终端敲回车就出来了
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。