关于信号sigprocmask

原创 2012年03月22日 10:28:11
  sigemptyset(&new_mask);
  sigaddset(&new_mask,SIGQUIT); //将信号SIGQUIT,添加到空信号集new_mask中
  if(sigprocmask(SIG_BLOCK, &new_mask,&old_mask)) //把信号SIGQUIT给阻塞
  {
  printf("block signal SIGQUIT error\n");
  }

  sigemptyset(&zero_mask); //清空信号集zero_mask

  while(quitflag == 0)
  {
  sigsuspend(&zero_mask); //将当前的信号掩码替换成空信号掩码zero_mask,等待SIGQUIT消息处理函数将quitflag置为1  
  }

  if(sigprocmask(SIG_SETMASK,&old_mask,NULL)<0) //程序继续运行后恢复进程原来的信号掩码
  {
  printf("unblock signal error\n");
  }
是为了原子操作
如果之前没有调用sigprocmask()屏蔽SIGQUIT信号,那么SIGQUIT信号随时都能发生
假定恰恰在判断quitflag == 0之后,信号发生,调用信号处理程序,quitflag = 1
从信号处理程序返回后,开始调用sigsuspend()..
如果此后没有第二个SIGQUIT信号,那么程序将一直阻塞在sigsuspend(),虽然此时quitflag = 1

调用sigprocmask()屏蔽SIGQUIT信号之后,即使信号发生,也将延迟递交,直到sigsuspend()解除信号屏蔽。

Linux信号控制-sigprocmask,sigsuspend,sigpending,sigaction,sigqueue

写在前面:小生纯业余选手,开此博仅仅是为了积累,纯当笔记来用。如有看官光临小生博客,请不要相信我的代码就是正确的。如果您发现了错误也恳请耽误您一点时间,请您在下面指出来,不胜感激! 如果发现一些笔...
  • glianyi
  • glianyi
  • 2014年07月12日 22:23
  • 650

Linux signals(二) sigprocmask,sigaction,不可靠信号及实例代码

简单举例sigpromask#include #include #include #includevoid handler(int sig);void printsigset(sigset_t *se...
  • normol
  • normol
  • 2017年12月07日 17:55
  • 9

Linux c之 信号屏蔽字sigprocmask()

出处:http://blog.163.com/shaoyi1110@126/blog/static/7432840120124852546380/   int sigprocmask(int ho...

APUE 程序清单10-11 信号设置和sigprocmask实例

#include "apue.h" #include "my_err.h" static void sig_quit(int); int main(void) { sigset_t newmask...

linux 信号量sigprocmask使用

源程序: #include #include #include #include int main(int argc,char **argv) { double y; sigs...

apue2 第十章 信号:Unix/Linux信号阻塞(sigaction sigprocmask sigsuspend)

#include #include #include #include #include #include void sig_int(int); int main(int arg...

Unix环境高级编程(阅读笔记)----信号集、信号屏蔽函数sigprocmask

信号屏蔽字是指一个进程中当前阻塞而不能够递送给该进程的信号集。 信号集则是一个能表示多个信号的集合的一种数据类型,为sigset_t。 与信号集设置相关的函数有如下几个: //  下列四个函...

信号signal()、alarm()、信号集函数、sigprocmask()

信号处理方式:     忽略 :但是SIGKEILL 和 SIGSTOP 不可以忽略;     捕捉信号: 但是不能捕捉 SIGKEILL 和 SIGSTOP ;     执行默认操作: co...

sigemptyset、sigaddset、sigprocmask的用法 信号未决,信号阻塞 信号的捕捉

下图表明了在linux系统中,信号的大致关系: 下面介绍一个简单的小例程: 该例程解释如下: 先设置两个信号集参数,s  p sigemptyset是将s的信号集先清空,sigaddset就...

2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,

 1信号产生原因 2.进程处理信号行为 manpage里信号3中处理方式: SIG_IGN SIG_DFL                  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于信号sigprocmask
举报原因:
原因补充:

(最多只允许输入30个字)