linux 进程信号集合 sigset_t
2024-10-19 01:24:25
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);
最新文章
- Gradle配置APK自动签名完整流程
- Hibernate5.2之QBC查询
- linux VI search command 搜索 加入行号
- Struts2+Spring+Hibernate(SSH)框架的搭建
- linux 文件目录
- 如何防止ASP.NET网站遭受CSRF的攻击
- Unity3D 之3D动画机设置
- 【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(一)
- DOS 命令批量删除文件及相关批处理命令详解
- sql server2008数据库迁移的两种方案
- ERP项目应该由谁来主导?
- POJ 2481 Cows 【树状数组】
- Celery 实现异步任务-one
- PAT-7-14 电话聊天狂人
- leetcode218
- 内存溢出导致jenkins自动部署到tomcat失败
- Android Studio启动速度慢的问题。
- url override implements session
- 谈谈CListCtrl如何调整行高
- Spring Cloud构建微服务架构(四)分布式配置中心(续)
热门文章
- 面向 Unity* 软件和虚拟现实的优化:运行时生成内容
- String、StringBuffer、StringBuilder有什么区别
- jquery on函数和prop与attr区别
- 十大经典排序算法总结 (Python)
- 日本IT行业劳动力缺口达22万 在日中国留学生迎来就业好时机 2017/07/18 11:25:09
- 梯度下降算法以及其Python实现
- 用python脚本计算某一个文件的行数
- OOP 1.1 引用
- Alpha 冲刺(4/10)
- struts2 action json(还有servlet的)