我对 Linux 中如何实现重新启动感兴趣,当我按 ctrl-alt-del 或单击菜单栏中的“重新启动”时,接下来会发生什么?
谢谢
以安全的方式使系统关闭。因此,所有登录用户都会收到系统即将关闭的通知,并且 login(1)被阻止。可以立即或在指定的延迟后关闭系统。首先通过信号 SIGTERM 通知所有进程系统即将关闭。它通过向 init 进程发出信号,要求其更改运行级别来完成其工作。运行级别 0 用于停止系统,运行级别 6 用于重新启动系统。
快速的答案是,在 / etc / rc6.d 执行所有的脚本。
以“K”开头的脚本使用“stop”参数执行。以“S”开头的脚本使用“start”参数执行。
有关更多信息,您可以在此处开始阅读 runlevels:http://en..org/wiki/Runlevel
Linux 上有不同的 init 系统,它们还控制重新启动 / 关闭时发生的情况。请参阅https://unix.stackexchange.com/questions/18209/detect-init-system-using-the-s以了解您使用的是哪个。
如果您使用的是 SysVinit,则会有一个与整个系统状态关联的runlevel。init 系统将首先运行与您当前运行级别关联的所有 kill 脚本,然后运行与 runlevel 6 关联的 start 脚本。如果您当前的运行级别是 5,它将运行 / etc / rc5.d / K *,然后是 / etc / rc6.d / S
如果您使用的是 systemd,则不会有整体的“runlevel”,而是会有一个定义的目标和服务的列表。目标列表本质上是一个运行级别。这些是在 / etc / systemd 下的.service 和.target 文件中定义的。在那里可能会定义一个“reboot.target”,并且依赖于它的其他服务将在重新启动时运行。请参阅0
一些 Ubuntu 版本也使用 upstart,但我认为它在更新的版本中已被 systemd 取代。如果您使用的是 upstart,请参阅this guide或this askubuntu question。
需要注意的一点是,无论您使用的是哪个 init 系统,您都可能正在使用通常与另一个关联的 init 脚本。所以您可能正在使用 sysVinit,但是一些 rc *.d 脚本可能是指向调用 systemd 脚本的东西的链接。或者反之亦然。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(13条)