处理 Linux 系统冻结的 3 种方法
那么,您的 Linux 系统没有响应吗?以下是处理冻结的 Linux 系统的多种方法。
Linux 众所周知非常稳定,但即使是最稳定的系统也可能遇到导致其无响应的情况。然后,当您按下并按住“电源”时,就会出现可怕的感觉。在这种情况下,可以尝试使用 Linux 的一些技巧。此时,我们不打算保存任何未保存的工作。我们希望找到一种方法来避免重新启动,或者至少提供尽可能干净的重新启动以避免损坏。
出于本文的目的,Linux 可以被视为一组 2 个堆栈:内核堆栈和用户堆栈。在用户堆栈中的某个位置,您正在运行程序。很可能是 X 服务器、窗口管理器和一些程序。您可以将程序列表(包括 X 服务器)想象为用户堆栈中的另一个堆栈。这个概念将帮助 Linux 新用户理解我们稍后将执行的一些任务。
1.使用xkill杀死无响应的程序
如果您使用的是 Linux 桌面,则第一步应该是尝试使用窗口管理器的执行命令(在 Ubuntu 中为 alt+f2)功能。如果你幸运的话,它迟早会弹出。
然后您可以执行 xkill 并将光标指向失效的窗口并单击它。
Xkill 的工作速度比传统的 X 图标或右键单击任务栏上的窗口并单击关闭更快。 Xkill 无需询问即可立即杀死。
2. 使用虚拟控制台 (TTY) 恢复冻结的 Linux 系统
有时,你不会那么幸运,系统可能看起来完全死了。
这可能只是一个幻觉。还记得用户堆栈内的程序堆栈吗?让我们稍微处理一下这张图片。
虽然看起来用户堆栈的根是 X,但事实并非如此。
X Window 系统在虚拟控制台 (VC)(也称为 TTY)上运行。它们在文件系统上表示为 /dev/ttyX。 Linux 有多种 VC 可供您使用。尝试访问另一个可以让您重新获得控制权。
您可以通过在 GUI 环境中按 CTRL+ALT+F{1,6} 或来请求不同的 VC ALT+F{1,6} 来自另一位 VC。上述按键使您可以访问 VC 1 到 6。图形界面在 VC 7+ 上运行。
当处理不稳定的系统时,即使请求更改 VC 也可能需要一些时间,因此请耐心等待。
如果您尝试更改虚拟控制台成功,系统将提示您输入用户名和密码。然后您将拥有一个文本模式控制台。您的系统应该在这里恢复一些稳定性;这部分是因为运行 X 和其他所有内容的虚拟控制台不再是优先事项。
登录后,您有几个选项。
您可以尝试使用 kill或killall来终止已失效的程序> 命令。
您可以终止窗口管理器、X 服务器或登录管理器。这将杀死所有子进程,如果一切顺利,您的登录管理器将重新启动,向您显示图形登录屏幕。
3. 当其他一切都失败时,使用 SysReq 与内核对话
有时,即使切换到 TTY 也不起作用。整个系统死了。不要再一次放弃,这很可能只是一种幻觉。对于这种情况,Linux 还拥有一项功能。
如果在内核中编译并在文件中启用,Linux 将为您提供直接向内核发送预设请求的方法。这在整个用户堆栈都死掉的情况下很有用。它被称为Magic SysRq 键。在大多数发行版中默认编译并启用,只有内核恐慌应该能够阻止其工作。
要确认在编译内核时设置了该选项,您可以尝试在 /boot 中找到当前内核的配置文件。查找选项 CONFIG_MAGIC_SYSRQ。如前所述,它在大多数发行版中都已编译并启用。要确认它已启用,请运行以下命令:
sysctl kernel.sysrq
在较旧的系统上,您有 2 个选项:0 和 1。它要么关闭,要么打开。在较新的产品上,可以更精细地控制启用哪些命令。
任何高于 1 的值都表示某些命令已启用。更多详情可在这找到。
要临时设置不同的值,请运行以下命令:
sudo sysctl -w kernel.sysrq=value
要永久更改此值,请编辑/etc/sysctl.conf。搜索 kernel.sysrq,并设置所需的值。
看看它是否有效的最简单方法就是尝试。我还建议在系统稳定时测试和学习一组击键。当您执行 SysRq 调用时,内核将尝试响应。仅当您位于虚拟控制台 1 至 6 中时才能看到此响应。如果焦点无法从 X 移开,您将看不到响应。这并不意味着它不起作用。
可以发送许多命令。完整列表可以在这里查看。我建议记住以下内容:
- Alt + SysRq + r
让键盘脱离原始模式,从 X 手中夺走控制权
- Alt + SysRq + e
向所有进程发送 SigTerm,让它们有机会优雅退出
- Alt + SysRq + i
向所有进程发送SigKill
- Alt + SysRq + k
杀死当前虚拟控制台中的所有进程
- Alt + SysRq + s
同步所有已安装的文件系统,将所有数据刷新到磁盘
- Alt + SysRq + u
重新挂载所有文件系统为只读
- Alt + SysRq + b
立即重新启动系统,不同步或卸载
- Alt + SysRq + o
停机系统
这个简短的命令列表为您在处理不稳定的系统时提供了一个强大的新工具。发送请求时,如果您无法看到内核的响应,请在命令之间间隔几秒钟。请求硬盘操作时请注意硬盘指示灯。
有 2 个序列值得记住。
Alt + SysRq + r e k
此顺序适合重新启动无响应的 X 服务器。首先使用 Alt + SysRq + r 让键盘退出原始模式。然后,您使用 Alt + SysRq + e 请求向所有进程发送 SIGTERM。 X 服务器可能会因该请求而重新启动。如果是这样,您已经拯救了您的系统。如果没有,请继续执行第三个请求,Alt + SysRq + k。这将向当前虚拟控制台中的所有进程发送SIGKILL。
如果执行上述序列后您的系统仍然没有响应,则应继续执行下一个序列。
Alt + SysRq + r e i s u b
最后一条命令将启动紧急重启。
r:让键盘退出原始模式
e :向所有进程发送 SIGTERM
i :向所有进程发送 SIGKILL
s:同步所有已挂载的文件系统
u :紧急重新挂载只读
b :立即重新启动系统
据我所知,您现在配备了针对无响应系统的最佳工具。您可以关注我的 YouTube 频道中的此视频进行演示。
我希望您通过本文学到了一些有关处理冻结的 Linux 系统的新知识。我想知道您对此的反馈。请使用评论部分分享您的想法。