• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

linux c sigsuspend 进程阻塞

Linux 水墨上仙 2860次浏览

int sigsuspend(const sigset_t *sigmask);
此函数用于进程的挂起,sigmask指向一个信号集。当此函数被调用时,sigmask所指向的信号集中的信号将赋值给信号掩码。之后进程挂起。直到进程捕捉到信号,并调用处理函数返回时,函数sigsuspend返回。信号掩码恢复为信号调用前的值,同时将errno设为EINTR。进程结束信号可将其立即停止。
出处:http://blog.csdn.net/muge0913/article/details/7334813

#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");  
}  


喜欢 (0)
加载中……