在/etc/rcX.d/中没有“K”链接的守护进程会发生什么

如果该脚本在(例如) /etc/rc0.d/中没有相应的K条目,init通过init脚本启动的stream程会发生什么?

例如,以下脚本启动了守护进程:

 -rwxrwxr-x. 1 root root 3.3K Jul 16 11:48 /etc/rc3.d/S99foobar 

没有对应的链接(如/etc/rc0.d/K99foobar )来处理在关机/重启时终止这些进程。

当这些进程是最后一次运行的时候,这些进程是否刚刚收到一个SIGTERM,接着是一个SIGKILL? 或者init是否足够聪明地调用/etc/init.d/foobar stop

如果仔细观察关机过程,几乎所有事情都完成后,您会看到init会杀死任何仍在运行的东西。

在Red Hat / CentOS 6系统上你会看到:

 Sending all processes the TERM signal... 

几秒钟之后

 Sending all processes the KILL signal... 

任何未被closures的东西都将被杀死。 这是在/etc/rc.d/init.d/halt脚本中,这是在系统closures时运行的最终脚本。

运行之后, halt开始卸载文件系统,并进行其他closures前的最终清理,最后实际上暂停或重新引导系统。

所有其他使用upstart或SysVinit的发行版都做类似的事情。

请注意,systemd不会出现这个问题,因为它总是知道它已经启动了哪些服务。

最后,把所有可以放下的东西都拿下来,剩下的一切都收到了“杀-9”。