reboot 、 init 6 和 shutdown -r now 之间有什么区别?

Rah*_*til 121 linux shutdown init reboot

我只想知道 in 之间的区别

  • reboot
  • init 6
  • shutdown -r now

哪个是最安全和最好的?

小智 107

它们没有区别。在内部,它们做完全相同的事情:

  • reboot使用shutdown命令(使用 -r 开关)。shutdown 命令用于杀死所有正在运行的进程,卸载所有文件系统,最后告诉内核发出 ACPI power 命令。来源可以在这里找到。在较旧的发行版中,reboot 命令通过发出SIGKILL信号(仍然可以在源代码中找到,可以使用-f选项调用)来强制进程退出,在最近的发行版中,它默认为更优雅和 init 友好的init 1 -> shutdown -r。这可确保守护进程在关闭前自行清理。

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

今天没有太大区别,因为这两个命令完全相同,并且它们通过为它们调用关闭脚本来尊重用于启动服务/守护程序的 init 脚本。除了reboot -f -r now下面提到的

从联机帮助页中有一个关于为什么reboot -f不安全的小解释:

  -f, --force
    强制立即停机、断电、重启。不要联系初始化系统。

编辑:

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

  • 那些 RHEL 版本不再“即将推出”。☺ 正如 http://unix.stackexchange.com/a/196014/5132 上更详细的解释,在这样的 systemd 操作系统上,根本没有区别。它们甚至不是不同的程序。 (3认同)

Mik*_* T. 15

关闭更可取,因为它允许您指定剧烈操作的原因——您应该始终这样做。该消息将记录在日志中以供后代使用。例如:

shutdown -r now 'Kernel upgrade requires reboot'

您还可以执行预定的重启——通过指定now重启时间以外的其他内容:

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

然后你的用户会在时间临近时收到定期提醒离开——这个过程会更加有序和专业。


Mar*_*rný 7

在 FreeBSD 上,reboot和之间存在差异shutdown -r now。从reboot手册页:

通常,shutdown(8) 实用程序在系统需要停止或重新启动时使用,向用户发出即将到来的厄运的提前警告并干净地终止特定程序。

  • 我知道这是一个 Linux 问题。我认为有人可能会发现知道在其他一些系统上有所不同很有用。 (5认同)
  • 我来这里寻找 BSD 的答案,很高兴在这里看到它,即使 BSD 不是 Linux。 (3认同)

小智 6

在传统的 unice 上,rebootshutdown -r now是截然不同的命令。在典型使用情况下,reboot只能在单用户模式下安全使用。

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

init(8) 重启(8)