reboot,init 6和now shutdown -r有什么区别?


Answers:


83

它们没有区别。在内部,它们执行完全相同的操作:

  • reboot使用shutdown命令(带有-r开关)。shutdown命令用于终止所有正在运行的进程,卸载所有文件系统,最后告诉内核发出ACPI power命令。来源可以在这里找到。在较早的发行版中,reboot命令通过发出SIGKILL信号来强制进程退出(仍然在源代码中找到,可以使用-foption 调用),在最近的发行版中,它默认为更加优美且初始化友好init 1 -> shutdown -r。这样可以确保守护程序在关闭之前自行清理。

  • init 6告诉init进程关闭初始化文件中写入的所有生成的进程/守护程序(以它们启动时的相反顺序),最后调用shutdown -r now命令重启计算机

如今,这两个命令的功能完全相同,因此并没有太大区别,它们通过调用关闭脚本来尊重用于启动服务/守护程序的初始化脚本。除reboot -f -r now下述内容外

从联机帮助页中可以看出为什么reboot -f不安全:

  -f,--force
    强制立即停止,关闭电源,重新启动。不要联系初始化系统。

编辑:

忘记提及了,在以后的RHEL发行版中,您应该使用new systemctl命令来发出poweroff / reboot。如的联机帮助页所述rebootshutdown它们是“仅可用于兼容性的旧命令”。该systemctl方法将是唯一的安全方法。


有时我的重启会挂在SIGTERM上,是否有办法知道为什么,并且还有使重启超时的方法,例如,如果花费的时间太长,它将强制重启?
CMCDragonkai 2014年

2
这些RHEL版本不再“即将推出”。ununix.stackexchange.com/a/196014/5132所详细说明的那样,在此类系统化操作系统上完全没有区别。他们甚至都不是不同的程序。
JdeBP

你说错字了init 1 -> shutdown -r吗?
deed02392

您的链接已损坏。
whoKnows

8

关机是可取的,因为它允许您指定采取剧烈动作的原因 -您应该始终这样做。该消息将记录在后代日志中。例如:

shutdown -r now 'Kernel upgrade requires reboot'

您还可以执行计划的重启-通过指定其他now时间作为重启时间:

shutdown -r 22:00 'Work around kernel memory leak'

然后,随着时间的流逝,您的用户将得到定期提醒,以提醒他们出去-流程将更加有序和专业。


5

在传统的Unix系统,reboot并且shutdown -r now有很大的不同命令。在典型用法下,reboot仅可在单用户模式下安全使用。

shutdown -r now是在不同* nix上关闭的规范方法,通常更安全使用,并且在功能上等效于init 6

初始化(8) 重新启动(8)


4

在FreeBSD上,reboot和之间有区别shutdown -r now。从reboot手册页:

通常,在需要停止或重新启动系统时使用shutdown(8)实用程序,可以向用户提前警告即将发生的厄运,并明确终止特定程序。


1
但是,这不是BSD问题,这是由该问题上的标记以及其中一个命令中使用System 5运行级别所证明的。☺
JdeBP

1
我知道这是一个Linux问题。我认为有人可能会发现了解其他系统的区别很有用。
玛丽安·塞尔尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.