信号是进程间通信机制中唯一的异步通信机制; 信号机制是进程间传递消息的一种机制, 是异步进程中通信的一种方式
一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号
内核处理一个进程收到的软中断信号是在该进程的上下文, 因此进程必须处于运行状态. 当其被信号唤醒或正常调度重新获得 CPU 时, 在从内核空间返回到用过户空间时会检测是否有信号等待处理. 如果存在未决信号等待处理且该信号没有被进程阻塞, 则在运行相应的信号处理函数前, 进程会将信号在未决信号链中占有的结构卸掉.
有两种信号不能被忽略, 分别是 SIGKILL 和 SIGSTOP. 因为它们向内核和超级用户提供了进程终止和停止的可靠方法
Python 标准库中的 signal 包就很容易学习和理解. signal 包负责在 Python 程序内部处理信号
信号是由内核 (kernel) 管理的.
信号的产生方式多种多样, 它可以是内核自身产生的, 比如出现硬件错误 (比如出现分母为 0 的除法运算, 或者出现 segmentation fault), 内核需要通知某一进程; 也可以是其它进程产生的, 发送给内核, 再由内核传递给目标进程. 内核中针对每一个进程都有一个表存储相关信息(房间的信箱). 当内核需要将信号传递给某个进程时, 就在该进程相对应的表中的适当位置写入信号, 这样, 就生成(generate) 了信号. 当该进程执行系统调用时, 在系统调用完成后退出内核时, 都会顺便查看信箱里的信息. 如果有信号, 进程会执行对应该信号的操作 (signal action, 也叫做信号处理 signal disposition), 此时叫做执行(deliver) 信号. 从信号的生成到信号的传递的时间, 信号处于等待 (pending) 状态. 我们同样可以设计程序, 让其生成的进程阻塞 (block) 某些信号, 也就是让这些信号始终处于等待的状态, 直到进程取消阻塞 (unblock) 或者无视信号
建议阅读
https://www.jianshu.com/p/e0a69beb98bb
来源: http://www.bubuko.com/infodetail-3240818.html