sigset_t
  号集及信号集操作函数:信号集被定义为一种数据类型:
  typedef struct {
  unsigned long sig[_NSIG_WORDS];
  } sigset_t
  信号集用来描述信号的集合,linux所支持的所有信号可以全部或部分的出现在信号集中,主要与信号阻塞相关函数配合使用。下面是为信号集操作定义的相关函数:
  int sigemptyset(sigset_t *set);
  int sigfillset(sigset_t *set);
  int sigaddset(sigset_t *set, int signum)
  int sigdelset(sigset_t *set, int signum);
  int sigismember(const sigset_t *set, int signum);
  头文件
  #include <signal.h>
  sigemptyset(sigset_t *set)初始化由set指定的信号集,信号集里面的所有信号被清空;
  sigfillset(sigset_t *set)调用该函数后,set指向的信号集中将包含linux支持的64种信号;
  sigaddset(sigset_t *set, int signum)在set指向的信号集中加入signum信号;
  sigdelset(sigset_t *set, int signum)在set指向的信号集中删除signum信号;
  sigismember(const sigset_t *set, int signum)判定信号signum是否在set指向的信号集中。

pthread_sigmask

POSIX 线程 – pthread_sigmask
在多线程的程序里,希望只在主线程中处理信号,可以使用该函数。
 
POSIX线程– pthread_sigmask
在多线程的程序里,希望只在主线程中处理信号,可以使用
函数:
int pthread_sigmask (int how,const sigset_t *set,sigset_t *oset)
  用作在主调线程里控制信号掩码。
How:
SIG_BLOCK:结果集是当前集合参数集的并集;SIG_UNBLOCK:结果集是当前集合参数集的差集;SIG_SETMASK:结果集是由参数集指向的集
头文件:<signal.h>
错误:[EINVAL] how不是已定义值
  提示:除非信号在所有的线程里都阻塞,否则总能将异步信号传输给这个进程。
解释:
每个线程均有自己的信号屏蔽集(信号掩码),可以使用pthread_sigmask函数来屏蔽某个线程对某些信号的
响应处理,仅留下需要处理该信号的线程来处理指定的信号。实现方式是:利用线程信号屏蔽集的继承关系
(在主进程中对sigmask进行设置后,主进程创建出来的线程将继承主进程的掩码)
static const int exceptsigs[] = {
SIGCHLD, SIGIO, SIGURG, SIGWINCH,
SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU, SIGCONT,
-,
};
sigset_t sigset;
sigfillset(&sigset);
for (i = ; exceptsigs[i] != -; i++)
{
sigdelset(&sigset, exceptsigs[i]);
}
pthread_sigmask(SIG_BLOCK, &sigset, NULL);

最新文章

  1. Gradle配置APK自动签名完整流程
  2. Hibernate5.2之QBC查询
  3. linux VI search command 搜索 加入行号
  4. Struts2+Spring+Hibernate(SSH)框架的搭建
  5. linux 文件目录
  6. 如何防止ASP.NET网站遭受CSRF的攻击
  7. Unity3D 之3D动画机设置
  8. 【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(一)
  9. DOS 命令批量删除文件及相关批处理命令详解
  10. sql server2008数据库迁移的两种方案
  11. ERP项目应该由谁来主导?
  12. POJ 2481 Cows 【树状数组】
  13. Celery 实现异步任务-one
  14. PAT-7-14 电话聊天狂人
  15. leetcode218
  16. 内存溢出导致jenkins自动部署到tomcat失败
  17. Android Studio启动速度慢的问题。
  18. url override implements session
  19. 谈谈CListCtrl如何调整行高
  20. Spring Cloud构建微服务架构(四)分布式配置中心(续)

热门文章

  1. 面向 Unity* 软件和虚拟现实的优化:运行时生成内容
  2. String、StringBuffer、StringBuilder有什么区别
  3. jquery on函数和prop与attr区别
  4. 十大经典排序算法总结 (Python)
  5. 日本IT行业劳动力缺口达22万 在日中国留学生迎来就业好时机 2017/07/18 11:25:09
  6. 梯度下降算法以及其Python实现
  7. 用python脚本计算某一个文件的行数
  8. OOP 1.1 引用
  9. Alpha 冲刺(4/10)
  10. struts2 action json(还有servlet的)