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\n",(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\n"); if(sigsuspend(&zeroset)!= -1) { printf("sigsuspenderror\n"); exit(0); } printf("afterreturn\n"); sigprocmask(SIG_SETMASK,&oldblockset,NULL); printf("SIGINTunblocked\n"); } void checkset() { sigset_tset; printf("checksetstart:\n"); if(sigprocmask(0,NULL,&set)<0) { printf("checksetsigprocmask error!!\n"); exit(0); } if(sigismember(&set,SIGINT)) printf("sigint\n"); if(sigismember(&set,SIGTSTP)) printf("sigtstp\n"); if(sigismember(&set,SIGTERM)) printf("sigterm\n"); printf("checksetend\n"); } void func() { printf("hellofunc\n"); }
查看全套文章:http://www.bianceng.cn/Programming/C/201212/34807.htm
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索printf
, 函数
, 进程
信号
,以便于您获取更多的相关知识。
时间: 2024-10-01 08:38:01