/sbin/init
我杀死(PID:1)后会发生什么?
这样之后系统会崩溃吗?
答案1
PID 1(init)是通常的信号相关规则的例外。Linux 手册(man 2 kill)对此的说明如下:
唯一可以发送给进程 ID 1(即 init 进程)的信号是 init 明确安装了信号处理程序的信号。这样做是为了确保系统不会意外崩溃。
由于不可能为 SIGKILL 设置处理程序,因此 SIGKILL 永远不会传递给 PID 1。但是,发送信号的进程将获得 0 返回代码,表明一切正常。
事实上,如果允许杀死 PID 1,将会导致灾难,因为它是所有其他进程的祖先进程,并且没有地方可以重新将它们作为父进程。如果 PID 1 自己调用 exit(),Linux 内核将崩溃,即立即中止一切并打印堆栈跟踪,就像 Windows 上的蓝屏死机一样。您可以通过将 shell 设为 PID 1 来亲自尝试这一点:
答案2
在 Ubuntu 20.04 上,它会导致屏幕立即冻结。老实说,我不确定是否有任何进程继续运行。
与其他答案相反,你能顺便说一下,杀死 PID 1,只是不要使用kill
或等效命令。如果您使用 gdb ( gdb -p 1
) 绑定到它,则可以使用该kill
命令杀死该进程。