跳转到内容

Linux 指南/冻结

来自维基教科书,开放世界中的开放书籍

本页描述了当程序出错时如何摆脱问题。最常见的方法是杀死进程 - 单个程序或其部分。如果你杀死一个进程,你可能会丢失该程序中的任何未保存的数据,以及可能从它生成的或与其通信的其他程序中丢失的数据。

本页还描述了如果计算机完全冻结该怎么办。

这些建议的后果越往列表下面越严重。例如,在 KDE 中杀死一个窗口将丢失该程序中未保存的数据,而按下重置按钮可能会损坏硬盘上的所有数据(在极端情况下)。除非别无选择,否则不要采取极端措施。

在桌面上

[编辑 | 编辑源代码]

在 X 窗口 (通用)

[编辑 | 编辑源代码]

在使用 X 环境时,默认的易于使用的应用程序用于杀死冻结的软件部分是 xkill。执行后,鼠标光标将变为一个头骨和交叉骨的图标,你点击的下一个窗口将被杀死。

 xkill

有时可以通过按下 Control+Alt+Escape 来完成,或者通过使用 ALT+F2 打开“运行”对话框,输入“xkill”然后按下 RETURN。

在 KDE 中

[编辑 | 编辑源代码]

KDE 系统守护程序(默认安装)可用于杀死有问题的进程。Ctrl+Esc 是启动它的默认键组合,或者运行 ksysguard

在 GNOME 中

[编辑 | 编辑源代码]

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 指南/命令/进程管理 页面提供了有关进程管理命令的更多信息,但下面列出了一些常用的命令

  • pkillkillall 是最有用的程序杀死命令,它们执行类似的操作。只需输入
pkill -TERM program_name
或者
killall program_name
此外,pgrep 可用于列出正在运行的进程。

强制退出 X 窗口系统

[编辑 | 编辑源代码]
  • 要杀死并重新启动 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

[编辑 | 编辑源代码]

如果其他方法都失败了,您仍然可以与 内核 通信。

要使用它,只需按住 Alt 和 SysRq(PrintScreen)键以及下面列出的键之一,全部一起按下。您应该尝试先切换到终端窗口,如果可能的话,通过按下 Ctrl+Alt+F2 (使用 Ctrl+Alt+F7 返回桌面)

如果您的计算机没有响应,您可以使用以下步骤执行重新启动,从而减少 fscking 文件的可能性。这是一种建议的方法

  1. 按下 Ctrl+Alt+F2 切换到终端窗口。有时,这是不可能的。
  2. 按下 Alt+SysRq+R 来获取键盘
  3. 如果之前按下 Ctrl+Alt+F2 失败了,请现在尝试再次按下。
  4. 按下 Alt+SysRq+E 结束所有进程。
  5. 按下 Alt+SysRq+I 杀死所有进程。
  6. 按下 Alt+SysRq+S 同步磁盘。
  7. 等待 “OK” 或 “Done” 消息。如果您没有看到消息,请查看硬盘指示灯以查看 Sync 是否有作用。
  8. 按下 Alt+SysRq+U 卸载所有磁盘驱动器。
  9. 等待 “OK” 或 “Done” 消息。如果您没有看到消息,请在 15-30 秒后,假设磁盘已卸载(或无法卸载),然后继续。
  10. 按下 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,日志文件系统将尝试完成或回滚正在更改的文件。

华夏公益教科书