据我所知,某些信号用于停止/继续和终止/终止进程。如果我让这个过程忽略所有的信号,会发生什么?是僵尸还是无法被杀的东西?
发布于 2018-05-19 09:56:49
有些信号是不容忽视的。SIGKILL总是杀死一个过程而不给它一个反应的机会。SIGSTOP总是暂停一个过程而不给它一个反应的机会。一些Unix变体可能提供其他不可忽略的、不可移动的信号;Linux只有标准的“杀死”和“停止”。
进程在SIGKILL之后可以保持落后的唯一方法是,如果它目前处于不中断的系统调用中。进程不能运行更多的代码,但是它会一直留在后面,直到系统调用完成或到达一个可中断点。这通常太短,无法观察,但是您有时会看到它(状态D中的一个挥之不去的过程),原因是有错误的驱动程序、错误的硬件,或者有时使用网络文件系统。请参阅如果“杀-9”不起作用呢?
无法杀死的进程不会是“僵尸”,因为僵尸已经死了,而术语“僵尸进程”实际上是存在的,它意味着对应于已经死掉的进程的一个处理表条目。请参阅linux如何处理僵尸进程?
发布于 2018-05-19 05:39:23
首先,僵尸是一种状态,在这种状态下,一个女兵释放了除PID之外的所有资源,并等待最终收获,即完全释放。
内核进程具有Task_Interruptible状态,这意味着它不会响应任何传递的信号。
因此,最后,如果您设法掩盖所有信号以避免处理管理信号,则它们将是独立的,并且在必要时无法进行管理。这也可能导致系统过载。
https://unix.stackexchange.com/questions/444747
复制相似问题