信号是由操作系统内核还是进程生成的?

Posted

技术标签:

【中文标题】信号是由操作系统内核还是进程生成的?【英文标题】:Are signals generated by OS kernels or processes? 【发布时间】:2015-12-15 01:15:33 【问题描述】:

https://en.wikipedia.org/wiki/Unix_signal 说

信号是进程间通信的一种有限形式,用于 Unix、类 Unix 和其他 POSIX 兼容的操作系统。一个信号 是发送到进程或特定的异步通知 线程在同一进程中,以便通知它发生的事件 发生了。

...

内核可以生成信号来通知进程事件。为了 例如,SIGPIPE 将在进程写入管道时生成 已被读者关闭;默认情况下,这会导致 进程终止,方便构建shell时 管道。

如果信号是由操作系统内核生成的,那么信号如何用于进程间通信?它是通过让操作系统内核在两个进程之间进行通信来完成的,即一个进程通过某种方式(也是信号?)与操作系统内核通信,然后操作系统内核通过信号与另一个进程通信?

【问题讨论】:

【参考方案1】:

信号可以来自内核或其他进程。在您的示例中,内核自己生成信号以便与进程进行通信。

其他进程也可以使用kill(2) 发送信号,它要求内核将信号传递给进程或进程组(进程甚至可以向自己发送信号)。如果发起者有权限发送信号,内核就会传递它。

当一个人运行类似的东西时会发生这种情况:

$ kill -TERM <some_pid>

值得注意的是,无论来源如何,内核都是唯一能够传递信号的实体。

【讨论】:

以上是关于信号是由操作系统内核还是进程生成的?的主要内容,如果未能解决你的问题,请参考以下文章

《Linux应用进程间通信 — 信号》

Linux操作系统-信号量

Linux操作系统-信号量

Linux操作系统-信号量

linux 进程通信之 信号

linux下 进程信号量和线程信号量的区别和联系是啥