首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

sigpending函数失效有关问题

2012-03-12 
sigpending函数失效问题?代码如下:#includestdio.h#includesignal.h#includestdarg.h#includetime.

sigpending函数失效问题?
代码如下:    
#include     <stdio.h>    
#include     <signal.h>    
#include     <stdarg.h>    
#include     <time.h>    
#include     <string.h>    
#include     <unistd.h>    
#include     <sys/types.h>    
void     sighandler(int     signum);    
char     buffer[200];    
int     main(void)    
{    
                              sigset_t     blockset;    
                              sigset_t     pending;    
                              int     pendingcount;    
                              strcpy(buffer, "None\n ");    
                              printf( "thread     id     is     %d.\n ",getpid());    
                              if(signal(SIGINT,&sighandler)==SIG_ERR)    
                              {    
                                                              printf( "couldn 't     register     SIGINT\n ");    
                              }    
                              if(signal(SIGTERM,&sighandler)==SIG_ERR)    
                              {    
                                                              printf( "couldn 't     register     SIGTERM\n ");    
                              }    
                              if(signal(SIGCONT,&sighandler)==SIG_ERR)    
                              {    
                                                              printf( "couldn 't     register     SIGCONT\n ");    
                              }    


                              sigemptyset(&blockset);    
                              sigemptyset(&pending);    
//                         sigaddset(&blockset,SIGINT);    
                              sigaddset(&blockset,SIGTERM);    
                              for(;;)    
                              {    
                                                              sigprocmask(SIG_BLOCK,&blockset,NULL);    
                                                              fgets(buffer,sizeof(buffer),stdin);    
                                                              printf( "input     %s\n ",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     signals\n ",pendingcount);    
                                                              }    
                                                              sigprocmask(SIG_UNBLOCK,&blockset,NULL);    
                              }    
                              return     0;    
}    
void     sighandler(int     signumber)    
{    
                              printf( "caught     sight     %d.\n ",signumber);    


}    
照理上应该会输出: "SIGTERM     IS     MEMBER "     但实际运行并没有输出,这是为什么啊?

[解决办法]
在其他终端执行kill pid //pid为你的程序的进程号

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

热点排行