如果该脚本在(例如) /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”。