各线程共享的资源:1、文件描述符表。2、每种信号的处理方式(SIG_IGN、SIG_DFL或者自定义的信号处理函数)3、当前工作目录。4、用户id和组id。各线程独立的资源:1、线程id。2、上下文,包括各种寄存器的值、程序计算器和栈指针。3、栈空间。4、errno变量。5、信号量屏蔽字。6..
分类:
编程语言 时间:
2016-07-17 02:41:31
阅读次数:
224
【摘要】本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等。最后介绍了应用层的相关处理,主要包括信号处理函数的安装、信号的发送、屏蔽阻塞等,最后给了 ...
分类:
系统相关 时间:
2016-07-15 23:50:25
阅读次数:
314
信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式。在Linux系统中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某种程序发生了什么事件,还可以给进程传递数据。 一、信号的来源 信号的来源可以有很多种试,按照产生条件的不同可以分为硬件和软件两 ...
分类:
系统相关 时间:
2016-07-05 23:59:18
阅读次数:
520
在基于进程模型的信号处理已经比较吗麻烦了,引入线程后事情就更加复杂了。 每个线程拥有其自身的信号掩码,但是信号处理函数是被进程内的所有线程共享的,作为一个推论,独立的线程能够阻塞信号,但是如果一个线程修改与给定信号的处理动作的时候,所有的线程都会共享这一修改。也就是说,如果一个线程选择忽略一个给定信... ...
分类:
编程语言 时间:
2016-07-02 20:20:30
阅读次数:
219
我们在10.6节中讨论了可重入函数以及信号处理函数,线程与信号处理函数在重入方面是非常相似的。多线程的控制的本质也是同时调用相同的函数。 如果一个函数可以被多个线程同时安全地调用,我们称该函数为线程安全的(thread-safe).除了图12.9列出的函数之外,The Single Unix Spe... ...
分类:
其他好文 时间:
2016-07-02 20:13:09
阅读次数:
270
在基于进程模型的信号处理已经比较吗麻烦了,引入线程后事情就更加复杂了。 每个线程拥有其自身的信号掩码,但是信号处理函数是被进程内的所有线程共享的,作为一个推论,独立的线程能够阻塞信号,但是如果一个线程修改与给定信号的处理动作的时候,所有的线程都会共享这一修改。也就是说,如果一个线程选择忽略一个给定信... ...
分类:
编程语言 时间:
2016-07-02 20:07:25
阅读次数:
148
linux 多线程信号总结(一) 1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函数,具体是哪个线程执行的难以获知。也就是说,信号会随机发个该进程的一个线程。 2 signal函数BSD/Linux的实现并不在信号 ...
分类:
编程语言 时间:
2016-06-17 06:15:59
阅读次数:
251
当一个信号捕获到并开始被进程处理的时候,进程正常执行的指令序列将被信号处理函数临时中断,进程立即转到信号处理函数中开始执行,如果信号处理函数返回(而不是调用exit或者是longjmp等),然后在进入信号处理函数之前进程正在执行的指令序列将会接着执行,但是在信号处理函数中,我们无法获知在信号被捕获的... ...
分类:
其他好文 时间:
2016-05-23 00:51:26
阅读次数:
284
在7.10节中,我们讲述了setjmp以及longjmp函数,这两个函数用于远程跳转。其中longjmp函数进场在信号处理函数中被调用,用于返回到进程的主循环中去,而不是从信号处理函数中返回。 但是使用函数longjmp有一个问题,当一个信号被捕获的时候,信号处理函数被执行,当前信号将被自动增加到进... ...
分类:
其他好文 时间:
2016-05-23 00:48:47
阅读次数:
243
1. 每个线程都有自己的信号屏蔽字 2. 每个线程都对同一信号都共享一个信号处理函数。 3. 主线程设置了pthread_sigmask后,子线程将复制一份设置好的信号屏蔽字。 然后我们来看下线程和进程间的比较 子进程继承父进程的属性: 子线程继承主线程的属性: 实际用户ID,实际组ID,有效用户I ...
分类:
编程语言 时间:
2016-05-16 19:36:44
阅读次数:
146