什么时候在unix中处理信号?

时间:2016-12-18 00:11:20

标签: unix linux-kernel signals

当unix中的信号准确开始执行时?系统进入内核模式时是否会处理信号?或者当它收到信号时立即?我认为它会在收到时立即处理。

2 个答案:

答案 0 :(得分:2)

信号是允许用户空间进程接收异步通知的Unix机制。因此,信号始终“由内核”传递。因此,如果没有转换到内核模式,就不可能传递信号。因此,在没有内核参与的情况下谈论“接收”信号(或发送一个)的过程是没有意义的。

可以用不同的方式生成信号。

  • 它们可以由内核中的设备驱动程序生成(例如,tty驱动程序响应中断,终止或停止键或响应后台进程的输入或输出)。
  • 它们可以由内核生成,以响应紧急的内存不足情况。
  • 它们可以由处理器异常生成,以响应进程在执行期间所执行的操作(非法指令,除以零,引用非法地址)。
  • 它们可以通过kill(2)由另一个进程(或接收进程本身)直接生成。
  • 写入没有读卡器的管道可以生成
  • SIGPIPE

但在每种情况下,信号都由内核传递给接收进程,因此通过内核模式转换。

内核可能需要强制进行转换 - 抢占接收进程 - 以便传递信号(例如,在处理器A上运行的CPU绑定进程被发送信号的情况下)处理器B)上运行的不同进程。

在某些情况下,内核本身(例如,使用SIGKILL - 或其他几个未配置信号处理程序时)可以处理信号以进行。< / p>

实际调用进程'信号处理程序是通过操作进程'用户空间堆栈来完成的,以便在从内核模式返回时调用信号处理程序然后,如果/当信号处理程序过程返回时,最初执行的代码可以恢复。

对于处理时的,这受到许多不同因素的影响。

  • 存在从不被信号中断的操作系统(即内核)操作(这些操作通常是相对短的持续时间操作),在这种情况下,信号将在完成之后被处理。
  • 该过程可能暂时阻止了信号传递,在这种情况下,信号将“待定”,直到它被解锁。
  • 由于多种原因,进程可以被换出或不可运行 - 在这种情况下,在进程再次运行之前,不能调用其信号处理程序。
  • 为了传递信号而恢复进程可能会因中断和更高优先级的任务而延迟。

答案 1 :(得分:0)

接收信号的过程会立即检测到信号。 根据信号类型,进程可能会使用默认处理程序对其进行处理,可能会忽略它或者可能会执行自定义处理程序。这很大程度上取决于过程是什么以及它接收的信号。例外是kill信号(9),它由内核处理并终止执行应该接收它的进程。