重要提示: 如果我这样做,我可以恢复停止旧行为:
apt install sysvinit-core
另外:基于旧Red Hat的版本也可以通过停止来关闭电源。
我试图理解为什么在 Debian 9 中你不应该再使用 halt 来关闭你的计算机。该行为已从 systemd 中删除。我有点害怕,但我认为一定有一个很好的合乎逻辑的理由。
其他 unix 或类 unix 是否具有相同的行为,或者 Linux 是否正在变成不同的东西?
现在,如果您想在系统关闭后关闭机器,您应该使用 poweroff 而不是 halt ...
有人知道这个命令在其他类 Unix 中是如何解释的吗?
这不是重复的,因为例如 debian 7 可以通过停止来关闭电源。
Debian
在 Debian(esque) 系统中使用 SysVinit 时,
/etc/defaults/halt
包含一个变量,该变量定义系统在转换到运行级别 0 结束时是运行停止还是关机。默认设置为HALT=poweroff
.在 SysVinit 2.74 之前,您不应该
halt
直接运行,并且从该版本开始,除非当前运行级别为 0 或 6,否则SysVinithalt
命令只会调用。这在手册页中有记录。在过渡到运行级别 0 结束时,运行级别脚本将运行,默认情况下等于。shutdown -h
halt(8)
$HALT
poweroff
RHEL/CentOS
RHEL/CentOS 5 是使用 SysVinit 的最后一个版本:使用版本 6
upstart
,版本 7 使用systemd
. 在 RHEL 5.11 中,转换到运行级别 0 时要运行的最后一个脚本是/etc/init.d/halt
,它的最后几行是:由于在转换到运行级别 6(重新启动)结束时也会运行相同的脚本,因此要运行的实际命令由变量 定义
$command
,它将是/sbin/halt
或/sbin/reboot
。根据$INIT_HALT
变量的值,脚本会决定是否添加-p
选项。该变量由 设置/sbin/shutdown
。RHEL 5.11shutdown(8)
手册页说:(是的,RHEL 5.11 手册页提到了 Debian 3.1!我猜 RedHat 有人将补丁从各种来源移植到 RHEL 错过了一个参考...)
看起来 RedHat 决定在脚本中对上述测试进行编码,
/etc/init.d/halt
这样关闭电源(/sbin/halt -p
在关机结束时使用)是默认的停止动作:在没有关机的情况下实现停止的唯一方法是使用显式请求它的命令的大写-H
选项,例如shutdown
shutdown -hH now
但同样,默认关机是由 Linux 发行版自定义的运行级别脚本触发的,因此它并不是 SysVinit
halt
命令的真正功能。历史记录
旧的使用 SysVinit 的系统(Linux 和非 Linux)曾经有几个不打算直接使用的命令,而只是作为适当的关闭/重启脚本的一部分。在 SysVinit 2.74 之前,
/sbin/halt
不带选项的命令将与现代 SysVinit 执行相同halt -f
的操作,即在不停止任何服务或卸载文件系统的情况下立即残酷地关闭内核。出于同样的原因,习惯于 Linux
killall
命令在其他 Unix 上可能是危险的。它的手册页甚至有这个不祥的警告:这是因为经典的 SystemV
killall
是那些设计为仅用作关闭脚本的一部分的命令之一。在带有 SysVinit 的 Linux 发行版中,该命令的经典版本可能是killall5
. 它实际上会杀死除内核线程和它自己的会话中的进程之外的所有进程:它的预期用途是在关闭所有服务之后,就在卸载本地文件系统之前的关闭脚本中,以杀死可能延迟或阻止卸载的任何其他进程。(你问我怎么知道的?嗯,我曾经犯过
killall <something>
在 Solaris 2.6 系统上以 root 身份运行的错误。非常有效的学习经验。)这个问题是基于多种错误的。
一个人没有
halt
用来关闭一个人的电脑,这并没有随着 systemd 改变。halt
akahaltsys
关闭并停止。poweroff
是一个较新的命令,可以关闭并关闭电源。(https://unix.stackexchange.com/a/196471/5132解释了我将在此处忽略的细微之处,因为问题仅与 Linux 操作系统有关。此答案仅针对 AT&T System 5 UNIX宇宙的另一面。)正如我在https://superuser.com/a/900205/38062中解释的那样,计算机不一定能够在软件控制下关闭电源。
haltsys
和命令的动作halt
通常是关闭和停止机器,下一个动作是操作员使用物理复位按钮或电源开关。halt
获得了-p
/--poweroff
选项以使其等效于poweroff
,但这是这些命令的重叠和自相矛盾选项普遍增长的症状。见证Debian 7中 Upstart 命令的手册页halt
。在halt --poweroff
那里。 Debian 7中 van Smoorenburg 命令的手册页halt
也有halt -p
.但这并没有随着 systemd 改变。systemd 提供相同的功能。systemd
halt
命令 也有--poweroff
. _ 它还具有--reboot
和(为了更好地衡量)--halt
选项。为了兼容性,我必须对nosh 工具集中的
halt
/haltsys
命令做同样的事情。您可能会错误地认为普通的老式
halt
计算机关闭了电源。但这对于 Upstart 来说显然是错误的,而且只有在你碰巧遇到错误时才适用于 van Smoorenburg 工具集。直到今年才终于修复的错误是 van Smoorenburg
halt
命令将简单地忽略选项的存在或不存在-p
,而是根据/etc/default/halt
. 如果您碰巧将该设置设置为关闭电源,那么halt
即使未-p
提供任何选项,也会始终关闭电源。相反,如果您碰巧将该设置设置为停止,那么halt
即使-p
提供了选项,也会始终停止。但这是一个错误,不是记录的或预期的行为,不是
halt
Debian 上可用的每个命令的行为,也不是该halt
命令的常规行为。进一步阅读
halt
意外改变的行为。Debian 错误 #743555。