sigset_t set
sigemptyset(&set) :清空阻塞信号集合变量
sigfillset(&set) :添加所有的信号到阻塞集合变量里
sigaddset(&set,SIGINT):添加单一信号到阻塞信号集合变量
sigdelset(&set,SIGINT):从阻塞信号集合变量中删除单一信号
void handler(int sig) //信号处理函数的实现
{
printf("SIGINT sig");
}
功能:返回在阻塞期间接收到阻塞信号的集合。
{
sigset_t set; //定义阻塞信号集的变量
sigemptyset(&set); //清空变量set的阻塞信号
sigaddset(&set,SIGINT); //添加将要阻塞的信号"SIGINT"到阻塞信号集变量
sigdelset(&set,SIGINT); //从已有的阻塞信号集变量中删除阻塞信号"SIGINT"
sigaddset(&set,SIGQUIT); //添加将要阻塞的信号"SIGQUIT"到阻塞信号集变量
sigprocmask(SIG_SETMASK,&set,NULL);// 将当前的阻塞信号集合变量set设置为该进程信号阻塞列表
while(1); //
return 0;
}
sigpending 函数:
printf( "set is %8.8ld. ", set );
sigpending( &pset );
printf( "Pending set is %8.8ld.
", pset );
kill( getpid(), SIGINT );
sigpending( &pset );
printf( "Pending set is %8.8ld.
", pset );
kill( getpid(), SIGQUIT );
sigpending( &pset );
printf( "Pending set is %8.8ld.
", pset );
sigsuspend函数(感觉场景不太普遍)
功能:它有一套属于自己的屏蔽信号mask,能够选择性接收某些信号。在接收到可行信号(也即是没有被屏蔽的信号)之前,运行到它时,它会一直悬挂着,有点类似pause()函数。接受到可行信号后,它会退出悬挂并执行相应的信号函数。接收到的信号源:1.之前运行sigprocmask()函数中阻塞的信号;2.悬挂后接受到的信号。
sigsuspend的整个原子操作过程为:
(1) 设置新的mask阻塞当前进程;
(2) 收到信号,恢复原先mask;
(3) 调用该进程设置的信号处理函数;
(4) 待信号处理函数返回后,sigsuspend返回。
sleep也是用sigsuspend实现的。
http://blog.csdn.net/elbort/article/details/7594772
http://blog.csdn.net/todd911/article/details/17319591