我对重启在Linux中是如何实现的很感兴趣。当我按下ctrl-alt-del或单击菜单栏中的“重新启动”时,接下来会发生什么?
谢谢!
发布于 2012-04-19 06:36:23
以一种安全的方式关闭系统。所有登录的用户都会收到系统即将关闭的通知,并且登录(1)被阻止。可以立即关闭系统,也可以在指定的延迟后关闭系统。所有进程首先通过信号SIGTERM通知系统正在关闭。它通过向init进程发送信号,请求它更改运行级别来完成它的工作。运行级0用于停止系统,运行级6用于重启系统,运行级1用于将系统置于可以执行管理任务的状态,因此基本上重启称为“关机”。
发布于 2012-04-19 06:48:08
简单的回答是/etc/rc6.d中的所有脚本都会被执行。
以"K“开头的脚本使用"stop”参数执行。以"S“开头的脚本使用”start“参数执行。
要获得更多信息,您可以在这里开始阅读运行级别:http://en.wikipedia.org/wiki/Runlevel
发布于 2016-06-17 00:13:51
请参阅https://unix.stackexchange.com/questions/18209/detect-init-system-using-the-shell以了解您使用的是哪一个。
如果您使用的是SysVinit,那么会有一个与整个系统状态相关联的runlevel。init系统将首先运行与当前运行级别相关联的所有终止脚本,然后运行与运行级别6相关联的启动脚本。如果当前运行级别为5,它将运行/etc/rc5.d/K*,然后运行/etc/rc6.d/S*。它们可能在另一个目录中,比如/etc/init.d/rc5.d/k*,这取决于您的Linux发行版。
目标列表本质上是一个运行级。它们在/etc/systemd下的.service和.target文件中定义。有关示例,请参阅the systemd homepage或此stackexchange question。
一些Ubuntu版本也使用upstart,但我认为在最近的版本中它已经被systemd取代了。如果您使用的是upstart,请参见this guide或this askubuntu question。
需要注意的一件事是,无论您使用的是哪个init系统,您使用的init脚本通常都与另一个系统相关联。因此,您可能正在使用sysVinit,但是一些rc*.d脚本可能是指向调用systemd脚本的内容的链接。反之亦然。
https://stackoverflow.com/questions/10219037
复制相似问题