`
yesjavame
  • 浏览: 658620 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

unix信号的问题

阅读更多

早期unix信号的问题
1. 信号可能会丢失:信号发生了进程却不知道
2. 信号控制力弱:
比如有时用户希望通知内核阻塞信号(不要忽略该信号,而是在其发生时记住它,然后在进程作好了准备时再恢复之)这种阻塞信号的能力当时并不具备。
3. 信号被抓获的时候,信号处理程序会被重置为DFL。
4. 慢性系统调用被中断时,必须手工重启之。下面的代码便是个例子:
again:
if ( (n = read(fd, buff, BUFFSIZE)) < 0) {
if (errno == EINTR)
goto again; /* just an interrupted system call */
/* handle other errors */
}

注意:
1. 中断的是系统调用,绝非函数;只有由内核执行的系统调用才会被中断
2. 慢性系统调用: 指的是可能使进程永远阻塞的系统调用.
较新的Posix.1兼容的sigaction并不使它们自动再起动。但可以使用SA_RESTART选项,使内核再起动由该信号中断的系统调用。

信号被捕捉时执行的动作
进程捕捉到信号并继续执行时,它首先执行该信号处理函数中的指令。如果从信号处理
函数返回(例如没有调用exit或longjmp),则继续执行在捕捉到信号时进程正在执行的正常指令序列(这类似于硬件中断发生时所做的)。


信号处理程序中对于errno的处理
考虑一个信号处理
函数,它恰好在main刚设置errno之后被调用。如果该信号处理程序调用read,则它可能更改errno的值,从而取代了刚由main设置的值。
作为一个通用规则,当在信号处理
函数中调用上面列出的函数时,应当在其前保存,在其后恢复errno。(要了解经常被捕捉到的信号是SIGCHLD,其信号处理函数通常要调用一种wait函数,而各种wait函数都能改变errno)

可靠信号原语
1. 信号递送(delivery):
执行信号处理函数(take action)
2. 信号未决(pending) :从信号产生(generation)到信号递送之间的时间间隔
3. 信号阻塞(blocked) :信号发生时不被递送,而是暂存并于稍后递送。(SIGKILL,SIGSTOP无法被阻塞)

信号被解除阻塞
1. 当一个被设定为阻塞的信号发生多次时,当该信号被解除
阻塞时,大多数UNIX系统采用的动作是只递送该信号一次(虽然Posix.1允许系统递送该信号一次或多次。如果递送该信号多次,则称这些信号排了队)。
2. 多个被阻塞的不同信号发生,当信号被解除
阻塞时,Posix.1并没有规定这些信号的递送顺序。但是Posix.1建议:与进程当前状态有关的信号,例如SIGSEGV在其他信号之前递送。
分享到:
评论

相关推荐

    UNIX信号和会话管理.pdf

    UNIX信号和会话管理 信号提供了一种通知进程系统事件发生的机制。它也是作为用户进程之间进行通信和同 步的一种原始机制。对于不同版本的UNIX 系统来说,信号的编程接口,行为特性和内部实现 都不尽相同。不同版本中...

    unix信号和处理方式

    unix信号和处理方式.txtunix信号和处理方式.txtunix信号和处理方式.txtunix信号和处理方式.txtunix信号和处理方式.txt

    unix_reader_writer.rar_linux reader writer_unix 信号_信号量_读写者_读写者问题

    unix下实现的读写者问题的代码,使用信号量的方法实现

    unix/linux信号详解大全

    自己整理的unix/linux信号详解大全,很详细。

    UNIX_信号说明1

    )[+]Unix信号列表下面是一些信号说明Unix信号列表1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP

    UNIX下的信号使用.rar_UNIX_unix c++_进程 信号

    UNIX环境中利用信号完成进程间的通信

    Unix下进程收到信号后的默认动作

    Unix下进程收到信号后的默认动作, 方便查找

    Unix System Programming (Unix系统编程)

    本书完全覆盖文件、信号、信号量、 POSIX线程以及客户端一服务器通信等内容,对通信、并发和多线程问题进行了深入研究,并对信号和并发等复杂的概念进行了全面深入的解释。本书还包含了关于Web、UDP以及服务器性能等...

    UNIX 操作系统基础实验 - 信号量经典问题的实现.pdf

    UNIX 操作系统基础实验 - 信号量经典问题的实现.pdf

    高级UNIX编程 pdf 电子书

    每章末都给出一了些练习,一些是简单的程序设计问题,还有一些可以作为学期的UNIX程序设计项目。 本书适合广大UNIX和c程序员、研究人员、高校相关专业师生学习和参考。 目录 出版者的话 专家指导委员会 译者序 前言...

    操作系统 理发师问题 Linux Unix

    操作系统 理发师问题 Linux Unix 操作系统 理发师问题 Linux Unix 操作系统 理发师问题 Linux Unix 操作系统 理发师问题 Linux Unix

    UNIX系统编程.pdf

    本书是UNIX系统编程的经典教材,并基于最新的UNIX标准进行了更新,其内容完全覆盖文件、信号、POSIX线程、UDP、Web和客户机-服务器等相关内容,并对通信、并发和多线程问题进行了透彻的研究,对复杂的概念进行了...

    UNIX环境高级编程

    7.10.2 自动变量的潜在问题 136 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141 8.2 进程标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和...

    UNIX系统编程 中文版 pdf

    本书完全覆盖文件、信号、信号量、 POSIX线程以及客户端一服务器通信等内容,对通信、并发和多线程问题进行了深入研究,并对信号和并发等复杂的概念进行了全面深入的解释。本书还包含了关于Web、UDP以及服务器性能等...

    Unix下信号灯和共享内存的使用方法.zip_信号灯_共享内存

    unix 系统下信号灯和共享内存的使用技术。

    LINUX.UNIX系统编程手册(下册)

    《linux/unix系统编程手册(上、下册)》总共分为64章,主要讲解了高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用posix线程技术编写多线程程序,创建和使用共享库,运用...

    理解Unix进程 扫描中文版.pdf

    《理解Unix进程》提供的许多简单而强大的技术,能够帮助Web开发人员深入了解Unix系统的并发性、守护进程、生成进程(spawning process)与信号等。同时,读者也可以使用这些技术和方法编写并调试自己的服务器。此外,...

    UNIX操作系统设计(The Design of the UNIX Operating System)

    12.1 多处理机系统的问题 12.2 主从处理机解决方法 12.3 信号量解决方法 12.3.1 信号量定义 12.3.2 信号量实现 12.3.3 几个算法 12.4 Tunis系统 12.5 性能局限性 12.6 习题 第13章 分布式UNIX系统 13.1 ...

    unix systems programming

    本书完全覆盖文件、信号、信号量、POSIX线程以及客户端一服务器通信等内容,对通信、并发和多线程问题进行了深入研究,并对信号和并发等复杂的概念进行了全面深入的解释。本书还包含了关于Web、UDP以及服务器性能等...

Global site tag (gtag.js) - Google Analytics