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

fuk*_*wi2 4 linux init.d

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

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

-rwxrwxr-x. 1 root root 3.3K Jul 16 11:48 /etc/rc3.d/S99foobar
Run Code Online (Sandbox Code Playgroud)

没有相应的链接(例如,/etc/rc0.d/K99foobar)来处理在关闭/重新启动时终止这些进程。

当这些进程最后运行时,它们是否只是从 init 接收一个 SIGTERM,然后是一个 SIGKILL?或者 init 足够聪明来调用/etc/init.d/foobar stop

Mic*_*ton 5

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

在 Red Hat/CentOS 6 系统上,您将看到:

Sending all processes the TERM signal...
Run Code Online (Sandbox Code Playgroud)

几秒钟后

Sending all processes the KILL signal...
Run Code Online (Sandbox Code Playgroud)

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

在此运行后,halt开始卸载文件系统并执行其他关闭前的最终清理,然后最终实际停止或重新启动系统。

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

请注意,systemd 不会出现此问题,因为它始终知道它启动了哪些服务。