|
兄弟写了个小小程序,用到 sigaction () 函数,其中用 sigaddset () 函数将 SIGINT 信号加到了 sa_mask 中去,程序如下:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
void ouch ( int sig )
{
printf ( "OUCH! - I got signal %d\n", sig ) ;
printf ( "\a" ) ;
}
int main ()
{
struct sigaction act ;
int mark ;
act.sa_handler = ouch ;
act.sa_flags = 0 ;
sigaddset ( &act.sa_mask, SIGINT ) ;
/*
mark = sigismember ( &act.sa_mask, SIGINT ) ;
if ( mark )
printf ( "Signal SIGINT is a member of the sa_mask \n\n\n" ) ;
else
printf ( "Signal SIGINT is not included in the sa_mask\n\n\n" ) ;
*/ 测试用
sigaction ( SIGINT, &act, 0 );
while ( 1 ) {
printf ( "Hello world! \n" ) ;
sleep ( 1 ) ;
}
}
运行后按 Ctrl-c 仍然输出 OUCH! - I got signal 2 ,而 SIGINT 确实在 sa_mask 中,我认为此时该信号已被屏蔽了,进程也不可能收得到,但是它又确实收到了,不解,望大哥指点!!谢了先!!!!!!! |
|