进程间之异步通信:信号Signal

信号

  1. 信号是进程间通信机制中唯一的异步通信机制;信号机制是进程间传递消息的一种机制,是异步进程中通信的一种方式
  2. 一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号
  3. 内核处理一个进程收到的软中断信号是在该进程的上下文,因此进程必须处于运行状态。当其被信号唤醒或正常调度重新获得CPU时,在从内核空间返回到用过户空间时会检测是否有信号等待处理。如果存在未决信号等待处理且该信号没有被进程阻塞,则在运行相应的信号处理函数前,进程会将信号在未决信号链中占有的结构卸掉。
  4. 有两种信号不能被忽略,分别是SIGKILL和SIGSTOP。因为它们向内核和超级用户提供了进程终止和停止的可靠方法
  5. Python标准库中的signal包就很容易学习和理解。signal包负责在Python程序内部处理信号

信号是由内核(kernel)管理的。

信号的产生方式多种多样,它可以是内核自身产生的,比如出现硬件错误(比如出现分母为0的除法运算,或者出现segmentation fault),内核需要通知某一进程;也可以是其它进程产生的,发送给内核,再由内核传递给目标进程。内核中针对每一个进程都有一个表存储相关信息(房间的信箱)。当内核需要将信号传递给某个进程时,就在该进程相对应的表中的适当位置写入信号,这样,就生成(generate)了信号。当该进程执行系统调用时,在系统调用完成后退出内核时,都会顺便查看信箱里的信息。如果有信号,进程会执行对应该信号的操作(signal action, 也叫做信号处理signal disposition),此时叫做执行(deliver)信号。从信号的生成到信号的传递的时间,信号处于等待(pending)状态。我们同样可以设计程序,让其生成的进程阻塞(block)某些信号,也就是让这些信号始终处于等待的状态,直到进程取消阻塞(unblock)或者无视信号

建议阅读

https://www.cnblogs.com/vamei/archive/2012/10/04/2711818.html
https://www.jianshu.com/p/e0a69beb98bb
https://www.cnblogs.com/madsnotes/articles/5688681.html

posted @ 2019-10-14 23:40  脚本小娃子  阅读(711)  评论(0编辑  收藏  举报