信号是由操作系统内核还是进程生成的?
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>
值得注意的是,无论来源如何,内核都是唯一能够传递信号的实体。
【讨论】:
以上是关于信号是由操作系统内核还是进程生成的?的主要内容,如果未能解决你的问题,请参考以下文章