Usm*_*man 25 linux shutdown command-line
是否有任何命令/程序可以让我立即关闭系统(1 到 5 秒)?
更新(2015):感谢那些建议关闭电源插座的人。:D
更新(2016 年): @technophile 建议我应该在描述问题性质的问题中添加一些信息 - 主要是我试图解决哪种情况。这是几年前提出这个问题的场景。
我们正在构建一个可部署在公共场所(如机场、酒店等)的系统。人们可以使用该系统使用信用卡上网、查看电子邮件甚至预订等。构建的系统确保第二个用户无法获得该系统前一个用户的信息(电子邮件、信用卡),即使键盘记录器类软件以某种方式安装。系统是如何确定的?好吧,无法共享详细信息,因为那不是公开信息。但是我们开发了一种方法,可以为系统的新用户始终拥有全新的操作系统(就像是新安装的一样)。唯一的问题是我们必须关闭机器并在第一个用户离开机器后立即重新启动。
而且我希望关闭立即快速( - 这就是问题的原因)并且下一次启动也非常快,为此我研究并尝试了大量 Linux 发行版,从 Damn Small Linux 到 Slackware 到 Debian 等,但这是一个单独的故事。
Fel*_*lix 39
sudo shutdown -h now
Run Code Online (Sandbox Code Playgroud)
Has*_*tur 19
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
Run Code Online (Sandbox Code Playgroud)
它粗暴、残酷,可以被认为 与拔掉电源线非常相似......
在正确的方法是shutdown -h now用sudo在需要的时候了。
也许我应该说合法的方式;见下文或更好tl;dr。
再多说几句,又名故事,第一章一
开始是init,直到最后。
整个的Linux取决于从关怀的INIT [ 1 ] [ 2 ]。尽管如此,并非没有一定程度的忘恩负义,曾经有一段时间,好主root 用户可以背叛这种爱并突然kill以无可争议的 ( -9) 命令初始化。
(礼仪之书规定伯爵、公爵和侯爵用户在 a 之前调用sudo)。
然后一些巫师制作了一个护身符来保护 init(来自 之书man 2 init)
唯一可以发送到进程 ID 1(init 进程)的信号是那些 init 已明确安装信号处理程序的信号。这样做是为了确保系统不会意外关闭。
(我们的间谍报告[ U1 ] init 将处理 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
所以好主root 用户 了解消息并更改命令,kill -ABRT 1或者kill -SEGV 1通常会生成一个内核恐慌和核心转储。
它起作用是因为init是第一个运行的进程并采用 PID 编号 1 [ 2b ]。
这是不安全的,不明智的,你觉得这是不祥之兆和诅咒的先驱,但如果你不能实质性地把手放在上面并拔掉它......
诅咒:它不会写入日志,它不会杀死所有进程并等待它们的结束,它不会写入 HDD 正确更新 inode,也不会卸载文件系统;甚至不介意它会保存图形窗口和外壳历史记录的选项,以及许多超出我们想象的东西......正如我们所说的,这几乎相当于拔掉电源线或笔记本电脑的电池。
正确的方式
“Non nobis, Domine, non nobis, sed nomini tuo da gloriam.”,圣殿骑士的座右铭。
的合法的(正确的)的方法是使用shutdown[ 3 ]
sudo shutdown -h now
Run Code Online (Sandbox Code Playgroud)
关机安排以安全的方式关闭系统。所有登录用户都会收到系统正在关闭的通知,并且...
但是-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 ]和关闭[ 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
Run Code Online (Sandbox Code Playgroud)
无论您是否在 systemd 下,您都应该能够在不调用所有正确关闭程序的情况下停止计算机(因此速度更快):
halt -f:使用上述命令指定选项-f(请注意,您需要-f避免关闭程序),使用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
Run Code Online (Sandbox Code Playgroud)
告诉 init 改变运行级别...但如果是这样为什么不直接杀死它?
在 systemd 下,您可以使用不明智的双重选项 --force --force
systemctl --force --force poweroff
Run Code Online (Sandbox Code Playgroud)
阅读 systemctl 手册[ 10 ]
-f, --force
与 enable 一起使用时,覆盖任何现有的冲突符号链接。
当与使用halt,poweroff,reboot或的kexec,执行所选择的操作,而无需关闭所有单元。但是,所有进程都将被强制终止,并且所有文件系统都以只读方式卸载或重新挂载。因此,这是请求立即重新启动的一个激烈但相对安全的选项。如果为这些操作指定了两次 --force,它们将立即执行而不会终止任何进程或卸载任何文件系统。警告:对这些操作中的任何一个指定 --force 两次可能会导致数据丢失。
Ps> 从尾部 JdeBP The Bard [ 7 ] 中获取有关变体的灵感。
Aar*_*ton 16
您可以通过以 root 身份或以对该文件具有写入权限的任何用户身份将“o”写入 /proc/sysrq-trigger 来立即关闭机器,而无需同步磁盘。
作为一个 shell 脚本,它看起来像
#!/bin/sh
echo o >/proc/sysrq-trigger
Run Code Online (Sandbox Code Playgroud)
有一个关于 sysrq 的 sysctl 选项,但该选项仅影响键盘触发。
如果您想立即重新启动而不是断电,您可以发送“b”而不是“o”;但请记住,虽然 sysrq-trigger 是最快的关闭方式,但可能有更快的重启方式。主板固件 (BIOS/UEFI) 可能需要大量时间来重新初始化硬件,因此使用 kexec 来实现重新启动通常会更快,因为硬件保持初始化状态。
您可能知道,在您将文件系统挂载为可写的任何情况下,都不建议这样做,即使您认为在挂载该文件系统时您没有为该文件系统编写任何重要的内容。即使您不关心该文件系统上数据的完整性,像这样关闭或重新启动也会使启动变慢。
确保没有任何持久文件系统被挂载为可写。
poweroff
Run Code Online (Sandbox Code Playgroud)
这应该适用于最常见的发行版。与 不同shutdown,在许多系统上,您可以以普通用户身份执行此操作(不需要 sudo)。
编辑:进一步阅读:
| 归档时间: |
|
| 查看次数: |
59361 次 |
| 最近记录: |