栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【Linux】如果用kill发送信号杀死init/systemd/upstart会发生什么?

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Linux】如果用kill发送信号杀死init/systemd/upstart会发生什么?

1号进程根据操作系统不同,运行着不同的进程,一般就是这几个

init、systemd、upstart

突发奇想,向1号进程发送kill -9 1会发生什么?可以成功将init进程杀掉吗?

理论上

根据manpage,一般情况下无法杀死init:

The only signals that can be sent to process ID 1, the init process, are those for which init has explicitly installed signal handlers. This is done to assure the system is not brought down accidentally.

只有在init中明确安装了相应的信号处理程序的信号才可以被发送到init程序并被处理。

所以默认情况下,在命令行中kill -KILL 1或者kill -TERM 1 都是没反应的。

实际上

我使用CentOS7.5对应的systemd测试如下:

显然如manpage所述,无法杀死systemd。

systemd可能发生了这几种情况:

  1. 没为这两个信号安装处理程序,接收不到信号;
  2. 可能是接收到了,但做了忽略处理;
  3. 还可能是屏蔽掉了,信号变成未决信号。

KILL和STOP信号是不可屏蔽不可忽略的,所以对于这两种信号,应该只有第一种可能,就是没接收到信号。

但是!!

kill -INT 1 向systemd发送中断INT信号会直接重启系统

使用 kill -QUIT 1 或者kill -SEGV 1 向systemd发送段错误SEGV信号或者QUIT信号会终止进程同时生成Core文件。

第一次发送信号的时候,在1381、1853进程产生core文件,然后冻结执行,所以没有导致系统的崩溃。

当我第二次发送这两条信号的时候,系统终于崩溃了,没有任何反应。

舒服了!

结论

对不同的操作系统带有的不同的初始化程序,发送这些信号应该是有不同的效果的,具体可以自己尝试一下。我如愿以偿用段错误尝试成功,换台机器换个系统可能就有不一样的效果了呢。

另外,俺测试的时候使用的阿里云的云服务器,也是虚拟化技术的产物,安装的操作系统也是买服务器的时候装的,可能和我们自己装的操作系统不一样。(毕竟docker里面的操作系统就有被阉割的版本)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/510097.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号