如果所有信号都被忽略怎么办?

如果所有信号都被忽略怎么办?

据我所知,一些信号用于停止/继续和终止/终止进程。如果我让进程忽略所有信号,会发生什么?会是丧尸还是打不死的东西吗?

答案1

有些信号不容忽视。 SIGKILL 总是杀死进程而不给它反应的机会。 SIGSTOP 总是挂起进程而不给它反应的机会。某些 Unix 变体可能提供其他不可忽略、不可处理的信号; Linux 只有标准的 KILL 和 STOP。

进程在 SIGKILL 之后保持不变的唯一方法是它当前处于不可中断的系统调用中。该进程无法再运行任何代码,但它将一直保留到系统调用完成或到达可中断点为止。这通常太短而无法观察到,但您偶尔可以看到它(状态中的一个挥之不去的过程D由于有缺陷的驱动程序、有缺陷的硬件或有时使用网络文件系统,您偶尔会看到它(状态中的一个挥之不去的进程)。看如果“kill -9”不起作用怎么办?

无法杀死的进程不会是“僵尸”,因为僵尸是已经死亡,术语“僵尸进程”实际上存在,表示与已经死亡的进程相对应的进程表条目。看linux如何处理僵尸进程

答案2

首先,僵尸是一种状态,进程已经释放了除PID之外的所有资源,并等待最终被收获,即完全释放。

内核进程具有 Task_Interruptible 状态,这意味着它不会响应任何传递的信号。

因此,最后,对于您的问题,如果您设法屏蔽所有信号以避免流程管理信号,那么它们将独立存在,并且在必要时无法进行管理。这也可能导致系统过载。

相关内容