当前位置:  技术问答>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"  但实际运行并没有输出,这是为什么啊?

|
在其他终端执行kill pid    //pid为你的程序的进程号

在你执行程序的终端敲回车就出来了

    
 
 

您可能感兴趣的文章:

  • 论坛 iis7站长之家
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于sigpending()无法返回被阻塞信号集的问题
  • sigpending的疑问


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3