systemd如何在杀死-9时幸存?


28

在最近的“为什么'kill -9 0'为什么终止我的控制台会话”和“如何使内核崩溃”这两个问题之间,我陷入了困境,并尝试kill -9 1使用一台最新的Arch Linux笔记本电脑。我以用户ID“ root”的身份进行了操作。

我完全预期会发生某种崩溃,恐慌或关机,但没有任何反应。我又做了kill -9 1一次,没有任何效果。

如今,Arch linux机器正在运行systemd,因此:systemdkill -9 如何生存?我希望Linux 3.7内核中有特殊情况的代码,但是也许还有其他我没有想到的原因。

用PID 1运行的其他内容又如何呢?init我相信Slackware仍会使用,但是我不敢在我的生产Slackware服务器上尝试它。我的无线路由器上的DD-WRT运行/ sbin / init某种形式。

Answers:


33

来自man 2 kill

可以发送到进程ID 1(初始化进程)的唯一信号是那些已为init明确安装了信号处理程序的信号。这样做是为了确保不会意外关闭系统。

也就是说,可以init在接收SIGKILL(包括退出)时做任何喜欢的事情,但是systemd的init不会为其安装任何信号处理程序,因此什么也没发生。


4
感谢您的注意。这是Linux特定的吗?我似乎还记得90年代初通过错误杀死init而使SunOS工作站崩溃。或不。我年轻时更加鲁re。
Bruce Ediger

1
@BruceEdiger,我似乎也记得能够kill -9 init引发内核恐慌。听起来好像有所改变。
psusi

2
@BruceEdiger-我在AIX服务器和HP-UX服务器上尝试过。两者均返回错误消息:kill:1:0403-068该信号对该进程无效或kill:1:指定的进程不存在。手册页特别提到,这将返回错误。许多人告诉我,以前可以做到这一点-但过去10多年没有人成功。
DarkHeart

2
@BruceEdiger从某些搜索看来,这是最近(至少就Unix寿命而言)的开发。不幸的是,我在90年代初还没有生命,所以发生这种情况超出了我的知识范围。但是,发现这将是一个有趣的过程,因为似乎几乎所有现代Unices都已默认更改为该行为。
克里斯·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.