当unix中的信号准确开始执行时?系统进入内核模式时是否会处理信号?或者当它收到信号时立即?我认为它会在收到时立即处理。
答案 0 :(得分:2)
信号是允许用户空间进程接收异步通知的Unix机制。因此,信号始终“由内核”传递。因此,如果没有转换到内核模式,就不可能传递信号。因此,在没有内核参与的情况下谈论“接收”信号(或发送一个)的过程是没有意义的。
可以用不同的方式生成信号。
kill(2)
由另一个进程(或接收进程本身)直接生成。 SIGPIPE
。 但在每种情况下,信号都由内核传递给接收进程,因此通过内核模式转换。
内核可能需要强制进行转换 - 抢占接收进程 - 以便传递信号(例如,在处理器A上运行的CPU绑定进程被发送信号的情况下)处理器B)上运行的不同进程。
在某些情况下,内核本身(例如,使用SIGKILL
- 或其他几个未配置信号处理程序时)可以处理信号以进行。< / p>
实际调用进程'信号处理程序是通过操作进程'用户空间堆栈来完成的,以便在从内核模式返回时调用信号处理程序然后,如果/当信号处理程序过程返回时,最初执行的代码可以恢复。
对于处理时的,这受到许多不同因素的影响。
答案 1 :(得分:0)
接收信号的过程会立即检测到信号。 根据信号类型,进程可能会使用默认处理程序对其进行处理,可能会忽略它或者可能会执行自定义处理程序。这很大程度上取决于过程是什么以及它接收的信号。例外是kill信号(9),它由内核处理并终止执行应该接收它的进程。