Linux 指南/冻结
本页描述了当程序出错时如何摆脱问题。最常见的方法是杀死进程 - 单个程序或其部分。如果你杀死一个进程,你可能会丢失该程序中的任何未保存的数据,以及可能从它生成的或与其通信的其他程序中丢失的数据。
本页还描述了如果计算机完全冻结该怎么办。
这些建议的后果越往列表下面越严重。例如,在 KDE 中杀死一个窗口将丢失该程序中未保存的数据,而按下重置按钮可能会损坏硬盘上的所有数据(在极端情况下)。除非别无选择,否则不要采取极端措施。
在使用 X 环境时,默认的易于使用的应用程序用于杀死冻结的软件部分是 xkill。执行后,鼠标光标将变为一个头骨和交叉骨的图标,你点击的下一个窗口将被杀死。
xkill
有时可以通过按下 Control+Alt+Escape 来完成,或者通过使用 ALT+F2 打开“运行”对话框,输入“xkill”然后按下 RETURN。
KDE 系统守护程序(默认安装)可用于杀死有问题的进程。Ctrl+Esc 是启动它的默认键组合,或者运行 ksysguard。
gnome-system-monitor 图形界面程序是查看活动进程、结束进程以及杀死进程的一种方法。还有一个“强制退出”小部件可以添加到面板中,它复制了 xkill 的功能。
停止在您使用的终端上运行的程序的最简单方法是按下 Ctrl+C,这会要求程序停止(发送 SIGINT) - 但程序可以忽略它。Ctrl+C 也适用于 XTerm 或 Konsole 之类的程序。另请参阅下面的 Alt+SysRq+K。
此外,还有一些命令可以从任何终端窗口杀死进程,而不仅仅是从程序运行的窗口。您可以使用 XTerm 或 Konsole 之类的程序来提供一个假的终端,或者您也可以通过按下 ctrl+alt+功能键来切换到终端;即 Ctrl+Alt+F2 到 Ctrl+Alt+F6(取决于您的系统)。Ctrl+Alt+F7 会让您返回桌面(同样,取决于您的系统)。
UNIX 指南/命令/进程管理 页面提供了有关进程管理命令的更多信息,但下面列出了一些常用的命令
- pkill 和 killall 是最有用的程序杀死命令,它们执行类似的操作。只需输入
pkill -TERM program_name
- 或者
killall program_name
- 此外,pgrep 可用于列出正在运行的进程。
- 要杀死并重新启动 X 窗口系统,请按下 Ctrl+Alt+Backspace。许多程序需要 X-Window,因此使用它会导致大多数正在运行的程序退出或崩溃。
- 您可能应该尝试在此之后重置计算机:输入
shutdown -r now
- 来执行此操作。您可能需要以 root 身份登录。
- 如果您有权访问命令行,您也可以输入
sudo /etc/init.d/(gdm or kdm or xdm) shutdown
- 来停止 X。
- 请注意,可以通过 X 的配置文件禁用通过按下 Ctrl+Alt+Backspace 重新启动 X 的功能。在 X.Org 实现中,可以将“DontZap”选项添加到 xorg.conf 来执行此操作。如果 Ctrl+Alt+Backspace 不起作用,这可能是原因。
如果您执行 Ctrl+Alt+Backspace 并且启用了 XDM 之类的登录管理器,通常在 x 重启后您将被抛回该登录管理器。如果您通过输入 startx 启动 X,这通常会将您抛回命令行
Ctrl+Alt+Backspace 可用于在更改分辨率后重新启动 X,例如。
如果其他方法都失败了,您仍然可以与 内核 通信。
要使用它,只需按住 Alt 和 SysRq(PrintScreen)键以及下面列出的键之一,全部一起按下。您应该尝试先切换到终端窗口,如果可能的话,通过按下 Ctrl+Alt+F2 (使用 Ctrl+Alt+F7 返回桌面)。
如果您的计算机没有响应,您可以使用以下步骤执行重新启动,从而减少 fscking 文件的可能性。这是一种建议的方法
- 按下 Ctrl+Alt+F2 切换到终端窗口。有时,这是不可能的。
- 按下 Alt+SysRq+R 来获取键盘
- 如果之前按下 Ctrl+Alt+F2 失败了,请现在尝试再次按下。
- 按下 Alt+SysRq+E 结束所有进程。
- 按下 Alt+SysRq+I 杀死所有进程。
- 按下 Alt+SysRq+S 同步磁盘。
- 等待 “OK” 或 “Done” 消息。如果您没有看到消息,请查看硬盘指示灯以查看 Sync 是否有作用。
- 按下 Alt+SysRq+U 卸载所有磁盘驱动器。
- 等待 “OK” 或 “Done” 消息。如果您没有看到消息,请在 15-30 秒后,假设磁盘已卸载(或无法卸载),然后继续。
- 按下 Alt+SysRq+B 重新启动。
使用的字母拼写为 REISUB - 使用助记符 即使系统完全崩溃也要重启。另一个流行的助记符是 养大象是如此无聊,或者直接将 BUSIER 倒过来拼写。
下面显示了所有可用命令的完整列表。它主要来自 Linux 内核源代码中的 Documentation/sysrq.txt。
Alt+SysRq+ | 动作 | 用途 |
R | UnRaw | 关闭键盘原始模式。这允许从键盘输入,即使 X-Window 崩溃了。 |
K | SAK - 杀死所有在控制台上的进程 | 安全访问密钥 - 杀死当前虚拟控制台上的所有程序。如果您想确保没有程序在控制台上等待获取您的密码,或者如果某个进程不允许您切换控制台,这将很有用。 |
S | Sync | 尝试同步所有文件系统。这减少了数据丢失和 fscking 的可能性。同步完成后,将打印 “done” 或 “OK”。 |
U | Umount | 尝试以只读方式重新挂载所有文件系统。卸载完成后,将打印 “done” 或 “OK”。 |
B | Reboot | 将立即重新启动,而不会同步或卸载任何磁盘。在使用此命令之前,请使用 Alt+SysRq+S 和 Alt+SysRq+U 以避免数据丢失。 |
C | Crashdump | 将执行 kexec 重新启动,以获取崩溃转储。在使用此命令之前,请使用 Alt+SysRq+S 和 Alt+SysRq+U 以避免数据丢失。 |
O | Power Off | 关闭计算机,而不会同步或卸载磁盘。在使用此命令之前,请使用 Alt+SysRq+S 和 Alt+SysRq+U 以避免数据丢失。 |
P | Show Pc | 尝试将所有寄存器和指针转储到控制台。 |
T | Show Tasks | 尝试将所有任务的列表转储到控制台。 |
M | Show Memory Info | 将内存信息显示到控制台 |
V | Voyager 处理器信息 | 将 Voyager SMP 处理器信息转储到您的控制台。 |
0-8 | 内核错误详细程度 | 设置内核消息的控制台日志级别。设置为 0 只显示 PANIC 和 OOPS 之类的消息 |
F | OOM Kill | 调用 oom_kill 来杀死占用内存过多的进程 |
E | Term | 向所有进程发送 SIGTERM 信号。 |
I | Kill | 杀死(向所有进程发送 SIGKILL 信号)。 |
L | Kill + Kill Init | 杀死(向所有进程发送 SIGKILL 信号),包括 init。使用此命令后,您将无法执行任何其他操作! |
N | Nice | 使实时进程可进行 nice 操作。 |
H | Help | 打印一些帮助信息 |
某些系统(由除您自己以外的部门或组管理的系统,例如公司或政府场所)可能会删除使用 SysRq 键组合的功能,以保护其系统免受低级命令的影响。如果您尝试了一些命令并发现没有任何反应,或者出现错误消息,这可能是原因。
当然,最后的选项是您计算机物理外壳上的电源按钮。现代 PC 有 ACPI 按钮,它只是将关机请求发送到内核。如果 ACPI 守护进程 正在监听并正确配置,它可以向 init
发送信号并执行干净的关机。
如果 ACPI 不起作用,您需要切断电源。这可以通过“硬开关”(通常标记为“重置”)完成,可能使用与之前相同的按钮,但按住它 5 秒左右。取出电池(在笔记本电脑上)并物理断开所有电源线,当然,这是唯一保证有效的方法。(确保上述其他方法均无效。即使作为最后的手段,也不建议在计算机运行时拔掉电源。)
重置而不关机可能会导致文件系统出现问题。为了尝试解决此问题,下次启动时将运行 fsck,日志文件系统将尝试完成或回滚正在更改的文件。