如果您不是因为真正的特殊原因而被强迫,我不建议您执行以下操作:
kill -SEGV 1 # should generate a core dumps and kernel panic
kill -ABRT 1 # should generate a core dumps and kernel panic
kill -9 1 # On old systems worked nowadays not
它粗糙,残酷,可以认为 相当于拔下电源线 ...
在正确的方法是shutdown -h now
用sudo
在需要的时候了。
也许我应该说合法的方式 ; 见下文或更好的tl; dr。
还有更多的话,也就是故事,第一章
最初是初始化,直到最后。
整个Linux取决于对init [ 1 ] [ 2 ]的关心。但是,并非没有一定程度的忘恩负义,好主主根使用者有时会背叛这种爱,并突然以不可辩驳的()顺序成立。(《礼节》规定了用户在a之前调用的计数,公爵和侯爵夫人)。 kill
-9
sudo
然后,一些向导创造了一种保护init的魅力(来自man 2 init
)
可以发送到进程ID 1(初始化进程)的唯一信号是那些init已明确安装了信号处理程序的信号。这样做是为了确保不会意外关闭系统。
(我们的间谍报告[ U1 ]初始化将处理1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
因此,良好的Lord root用户 了解消息并更改命令,kill -ABRT 1
否则kill -SEGV 1
通常会生成一个内核崩溃和核心转储。
之所以起作用,是因为init是第一个运行的进程,其PID号为1 [ 2b ]。
这是不安全,不明智的,您会感觉到它预兆着坏兆头和诅咒,但是如果您不能实质性地把手放开并拔下插头的话……
诅咒:它不会写在日志上,不会杀死所有进程并等待它们的结束,它不会写在HDD上以正确更新inode,也不会卸载文件系统;甚至不用介意它会保存图形窗口和外壳历史记录以及其他许多超出我们想象的选项……正如我们所说,这几乎相当于拔下电源线,或者拔掉笔记本电脑的电池。
正确的方式
“非诺比斯,多米诺骨牌,非诺比斯,圣诺瓦比诺。”,圣殿骑士团的座右铭。
的合法的(正确的)的方法是使用shutdown
[ 3 ]
sudo shutdown -h now
关闭可以安全地关闭系统。通知所有登录的用户系统正在关闭,并且...
但是有了-h now
他们,他们将没有足够的时间做很多事情……
故事,第二章,还有更多的话。
曾几何时,Unix上的人们从天空上感受到了一些逻辑上的步骤:
一旦系统进程被杀死并且文件系统被卸载,系统将停止/关闭电源或自动重启。使用halt或reboot命令可以完成此操作,该命令会将更改同步到磁盘,然后执行实际的暂停/关机或重新引导。[ 4 ]
实际上,如今,我们不相信任何更在三摩伊赖的存在[ 5 ] 中的Linux世界,reboot
,poweroff
和halt
[ 6 ]:对现代科学的ls -l $(which poweroff halt reboot)
和的一个man reboot
,在这黑暗时代的价差新光源及显示我们它只存在一个解析所有选项的真实命令,因此我们最终可以自由地提出与它们的命令名称相矛盾的操作!(halt -p
或reboot -p
为poweroff
,shutdown -r
为reboot
...)
现在,一切似乎是明确的和舒适的所有传言权利要求[ 7 ],在黑社会的systemd工具集 [ 8 ]进行了一场革命留下不知道整个游戏地图。多亏了向后兼容垫片,我们根本没有注意到重新启动,关机,停止[ 6 ]甚至telinit [ 9 ]和shutdown [ 3 ]都已经绑定到新的国王systemctl [ 10 ]。请听JdeBP The Bard [ 9 ]的原始声音来讲述整个故事,因为我没有呼吸了。
如果您是Ubuntu邪教的追随者,您可能仍然会在一段时间内对所有这些主张保持警觉[ 11 ]。
中间地球halt -f
,init
,telinit
,systemctl
搜索解决方案比正确的速度较快,但也明智的。
systemctl --force --force poweroff # the most close to kill -9 1
systemctl --force poweroff # rough but still safe
sudo halt -f # rough
sudo telinit 0 # or 6 # safe
kill -SIGINT 1 # cause reboot as the reboot command
kill -SIGRTMIN+4 1 # cause shutdown as the halt command
无论您是否处于系统状态下,都应该能够在不调用所有正确的关机程序的情况下停止计算机(并且这样会更快):
halt -f
:使用或什至可以通过上述命令指定选项-f
(请注意,您需要-f
避免关闭程序)。实际上,我们可以从(和等效的文件)中了解到需要指定避免调用shutdown 的选项:sudo poweroff -f
sudo reboot -f -h
man reboot
-f
当使用--force调用或处于运行级别0或6时,此工具将调用本身的reboot(2)系统调用(传递了REBOOTCOMMAND参数)并直接重新引导系统。
否则,这会简单地使用适当的参数调用shutdown(8)工具,而不传递REBOOTCOMMAND参数。
-f,--force
不调用shutdown(8),而是执行您希望通过name执行的实际操作。
此外,您可以使用telinit
[ 2b ](或init
直接)
sudo telinit 0 # or 6
告诉init更改运行级别...但是如果是这样,为什么不直接杀死它呢?
在systemd下,您可以使用不明智的double选项 --force --force
systemctl --force --force poweroff
阅读systemctl手册[ 10 ]
-f,--force
与enable一起使用时,将覆盖所有现有的冲突符号链接。
当与使用halt
,poweroff
,reboot
或的kexec,执行所选择的操作,而无需关闭所有单元。但是,所有进程将被强制终止,所有文件系统都将以只读方式卸载或重新装载。因此,这是请求立即重新启动的激烈但相对安全的选择。如果为这些操作指定了两次--force,它们将立即执行而不会终止任何进程或卸载任何文件系统。警告:在这些操作中两次指定--force 可能会导致数据丢失。
Ps>从尾部的JdeBP The Bard [ 7 ]中获取有关变体的灵感。