Linux下C编程:sigsuspend进程阻塞2012-12-30 CSDN 张同浩int sigsuspend(const sigset_t *sigmask);此函数用于进程的挂起,sigmask指向一个信号集。当此函数被调用时,sigmask所指向的信号集中的信号将赋值给信号掩码。之后进程挂起。直到进程捕捉到信号,并调用处理函数返回时,函数sigsuspend返回。信号掩码恢复为信号调用前的值,同时将errno设为EINTR。进程结束信号可将其立即停止。
#include <stdio.h> #include <signal.h>void checkset(); void func(); void main() {sigset_tblockset,oldblockset,zeroset,pendmask;printf("pid:%ld
",(long)getpid());signal(SIGINT,func); sigemptyset(&blockset);sigemptyset(&zeroset);sigaddset(&blockset,SIGINT); sigprocmask(SIG_SETMASK,&blockset,&oldblockset);checkset();sigpending(&pendmask); if(sigismember(&pendmask,SIGINT))printf("SIGINTpending
"); if(sigsuspend(&zeroset)!= -1){printf("sigsuspenderror
");exit(0);} printf("afterreturn
");sigprocmask(SIG_SETMASK,&oldblockset,NULL); printf("SIGINTunblocked
"); }void checkset() {sigset_tset;printf("checksetstart:
");if(sigprocmask(0,NULL,&set)<0){printf("checksetsigprocmask error!!
");exit(0);} if(sigismember(&set,SIGINT))printf("sigint
"); if(sigismember(&set,SIGTSTP))printf("sigtstp
"); if(sigismember(&set,SIGTERM))printf("sigterm
");printf("checksetend
"); }void func() {printf("hellofunc
"); }

查看全套文章:http://www.bianceng.cn/Programming/C/201212/34807.htm