Linux线程信号
来源:互联网 发布:摩根财团 知乎 编辑:程序博客网 时间:2024/05/02 04:52
1. 概念
- 按照 POSIX, 异步 (外部) 信号发送到整个进程.
- 所有线程共享同一个设置, 即通过 sigaction 设置的线程处置方法.
- 每个线程有自己的信号掩码, 线程库根据该掩码决定将信号发送到哪个线程.
- 由于Linux 线程实现上的独特性, 外部信号始终发送到特定的线程.
2. 例子
3. 打印结果
Enter Testcase - ./test
Set up the alarm handler for the process
Create masked and unmasked threads
Thread 3085065104 entered
Masked thread 3076672400 entered
Thread 3068279696 entered
Masked thread 3059886992 entered
Thread 3051494288 entered
Masked thread 3043101584 entered
Send a signal to masked and unmasked threads
Thread 3085065104 in signal handler
Thread 3085065104 did not get expected results! rc=27
Thread 3068279696 in signal handler
Thread 3068279696 did not get expected results! rc=27
Thread 3051494288 in signal handler
Thread 3051494288 did not get expected results! rc=27
Wait for masked and unmasked threads to complete
Masked thread 3076672400 completed masked work
Masked thread 3059886992 completed masked work
Masked thread 3043101584 completed masked work
Main completed
4. 相关函数
sigaction(查询或设置信号处理方式)
#include<signal.h>
int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);
sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。
如参数结构sigaction定义如下
struct sigaction
{
void (*sa_handler) (int);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer) (void);
}
sa_handler此参数和signal()的参数handler相同,代表新的信号处理函数,其他意义请参考signal()。
sa_mask 用来设置在处理该信号时暂时将sa_mask 指定的信号搁置。
sa_restorer 此参数没有使用。
sa_flags 用来设置信号处理的其他相关操作,下列的数值可用。
#include<signal.h>
int sigfillset(sigset_t * set);
sigfillset()用来将参数set信号集初始化,然后把所有的信号加入到此信号集里。
int sigemptyset(sigset_t *set);
- SIG_BLOCK:向当前的信号掩码中添加new,其中new表示要阻塞的信号组。
- SIG_UNBLOCK:向当前的信号掩码中删除new,其中new表示要取消阻塞的信号组。
- SIG_SETMASK:将当前的信号掩码替换为new,其中new表示新的信号掩码。
源文档:http://www.cppblog.com/prayer/archive/2010/03/27/101230.html?opt=admin
- Linux线程信号
- linux线程信号
- Linux线程信号
- linux 线程 信号
- Linux 线程信号处理
- linux中的线程和信号
- linux线程同步之信号
- Linux中线程与信号
- Linux _ pthread 线程 信号
- Linux C 信号、线程同步、线程互斥锁、线程条件变量
- linux线程通信信号以及进程通信信号
- linux学习杂记_信号_线程
- linux应用线程和信号处理
- Linux内核线程中信号处理
- 关于linux线程实时信号的一个问题
- linux内核线程对信号的处理过程
- linux内核线程对信号的处理过程
- linux内核线程对信号的处理过程
- 管理,抑或技术?
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- 怎样进行wince开发(环境搭建、思路)
- 如何更好地控制input输入框的高度
- Linux服务器应注意的安全问题-ssh暴力破解--denyhosts解决
- Linux线程信号
- 郁闷
- 十种最受前辈宠爱的职场新人
- Sequence浅析
- SQL SERVER char和varchar数据类型的区别
- Joomla连接MediaWIKI失败
- symfony常见问题记录
- 这是一个好地方
- 悼念王江民老师~~~