今天面试被问到一个问题, 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掉