今天面试被问到一个问题, pid为1的进程, 如果被kill掉会发生什么,我只想到pid为1的是/sbin/init
进程, 在docker里就是启动容器的那行命令,在容器外kill掉这个进程会容器整个崩溃
于是想当然的认为会被直接kill掉它,发生crash
后来想想不对劲, 去翻看了一下手册
0号进程是是内核本身的一部分,不在用户空间,信号对其无效, 一般是
sched
/swapper
1号进程是一切用户进程的父进程,一般是init
/systemd
kill -9 0
的时候,kill(0, SIGKILL)
,信号下发的时候会同时杀掉当前进程所属的整个进程组,在shell执行的表现就是,执行完后发现shell被关掉了kill -9 1
的时候,如下图
#define SIGNAL_UNKILLABLE 0x00000040 /* for init: ignore fatal signals */
kill -9 -1
的时候, 把信号发给所有能发的进程, 结果就是能kill的全kill掉