当Ubuntu卡住时,我应该怎么办?

所有操作系统有时候会出现卡顿,Ubuntu也不例外。当出现以下情况时,我应该怎么做才能恢复控制:

  • 只有一个程序无响应时?
  • 鼠标点击或按键没有任何反应时?
  • 鼠标完全停止移动时?
  • 我使用的是Intel Bay Trail CPU?

在决定拔掉电源之前,我应该按照什么顺序尝试各种解决方案?

当启动Ubuntu失败时,我应该怎么做?是否有一套诊断流程可以按照?


5相关(在 [unix.se] 上):如何修复不响应的Ubuntu系统? - Eliah Kagan
你应该冥想一下,开始学习Windows或MacOS!它们比Linux稳定得多。 - Simple Fellow
1这是两个不同的问题 - 冻结和无法启动。 - Konrad Gajewski
47个回答

如果电脑完全死机,你可以使用REISUB来解决问题,这是相对于直接冷启动电脑更安全的选择。
REISUB的操作方法如下:
同时按住AltSysReq (Print Screen)键,然后依次按下REISUB键。
R:  Switch to XLATE mode
E:  Send Terminate signal to all processes except for init
I:  Send Kill signal to all processes except for init
S:  Sync all mounted file-systems
U:  Remount file-systems as read-only
B:  Reboot

一些REISUB的助记词:
- 如果你喜欢僵尸电影,就“起来”(从死亡中) - 倒着念“BUSIER”,就像是“系统比它应该的更忙!” - 重启,即使系统彻底崩溃 - 或者经典的:“举起大象是如此无聊”
这是SysReq键:

SysReq key

注意:有一种比重新启动整个系统更温和的方法。如果SysReq键有效,你可以使用Alt+SysReq+F逐个杀死进程。内核会每次杀死最“昂贵”的进程。如果你想杀死一个控制台上的所有进程,可以使用Alt+SysReq+K

注意:你应该明确启用这些组合键。Ubuntu默认设置sysrq为176(128+32+16),只允许运行REISUB组合中的SUB部分。你可以将其更改为1(启用所有命令)或244,这样可能会造成较少的危害。操作步骤如下:

sudo nano /etc/sysctl.d/10-magic-sysrq.conf

并将176切换到244;然后
echo 244 | sudo tee /proc/sys/kernel/sysrq

它会立即起作用!您可以通过按下 Alt+SysReq+F 进行测试。对我来说,它关闭了活动的浏览器选项卡,然后关闭了所有的扩展程序。而且如果你继续进行,可能会导致X Server重新启动。


更多关于所有 Alt+SysReq 功能的信息请点击这里

135在你被迫这样做的情况下,请慢慢进行。每次按键之间留出几秒钟的时间,以便你正在调用的命令有机会在你进行下一个操作之前完成。 - Andrew Lambert
28如果你喜欢助记法的话:举起大象真是无聊透顶,或者重新启动事件即使系统彻底崩溃。我也见过它被缩写为RSEIUB(举起瘦小大象真是无聊)。 - Siegfried Gevatter
15我实际上是自己想出来的,试着记住这个方式:"在Ubuntu中重置系统环境" 或者 "在系统Ubuntu中重置环境"。 - Luis Alvarado
4如果你使用的Mac没有SysRq键,你该怎么办? - Cerin
2如果我的键盘没有SysRqPrint Screen键怎么办?在我的意大利键盘上没有这些键。我有StampBloc ScorrPausa/Interr键。 - Bakuriu
@Bakuriu 应该是Stamp - Alaa Ali
3这只在它冻结时才有效吗?我刚刚尝试按下Alt+Fn+SysReq(戴尔笔记本键盘)来测试它是否有效,但没有起作用! - Yasser Zamani
感谢上帝,根据维基百科的文章,Alt Gr也可以使用。否则,一边按住左侧的Alt键,一边按住右侧的SysRq键进行输入将是一项相当费力的任务。顺便提一下,再次引用维基百科的文章:"在图形化环境(如GNOME或KDE)中,'Alt'+'PrintScrn/SysRq'组合通常只会导致屏幕截图被保存。为了避免这种情况,神奇的SysRq组合应该包括Ctrl键,变成'Ctrl'+'Alt'+'SysRq'+键。" - Halil Özgür
顺便说一句,Magic-SysRq在Kubuntu 14.04 LiveCD中似乎无法直接使用:无论是哪个Magic-SysRq命令,都会显示“此sysrq操作已禁用”。需要通过echo 1 > /proc/sys/kernel/sysrq来启用它。但在安装的Kubuntu 14.04上可以正常使用。 - Ruslan
@Ruslan 我添加了一些关于如何设置所需的按键启用的信息。 - Danatela
在进行这个操作之后,建议从备份中恢复数据吗? - lesnikow
这取决于键盘是如何连接到盒子上的。PS2、USB、蓝牙还是2.4G? - Alex
我通常记得它是BUSIER倒过来,但是我不知道每个字母的作用。那么,Raw Execution Insist Sync Umount Bang!呢? - Katu
1为什么REI部分不是默认启用的?我发现那部分比SUB部分更有用。 - Cirelli94
我可以用这个来一直杀掉Chrome吗?总是Chrome导致我的崩溃。 - Layke
1有人能告诉我联想T系列键盘上的_SysRq_是什么吗?打印/截屏键(位于_AltGr_和_右Ctrl_之间的那个键)没有任何效果。 - Fred
这个默认没有启用的原因是否充分合理呢?我在想,也许我不应该去启用它。 - lucidbrot
1我没有那个键 SysReq - KansaiRobot
正如维基百科的文章所提到的,在日志文件系统出现之前,这是相关的。还可以提到echo..命令只是为了在当前会话中应用更改,与sudo sysctl kernel.sysrq=244相同。 - Pablo Bianchi

当一个程序停止工作时:

当一个程序窗口不响应时,通常可以通过点击窗口左上角的X形关闭按钮来停止它。这通常会弹出一个对话框,显示该程序未响应(但你已经知道了),并给出杀死程序或继续等待其响应的选项。

有时候这种方法不起作用。如果无法正常关闭窗口,可以按下Alt+F2,输入xkill,然后按下Enter。你的鼠标光标将变成一个X。将光标悬停在有问题的窗口上,左键单击以结束它。右键单击将取消操作,并将鼠标恢复为正常状态。

如果您的程序是从终端运行的,那么通常可以使用Ctrl+C来停止它。如果不是的话,找到其命令的名称和进程ID,然后使用kill [进程ID]尽快结束程序。它会发送默认信号SIGTERM15)。如果一切都失败了,作为最后的手段,发送SIGKILL9):kill -9 [进程ID]。请注意,只有在万不得已的情况下才应该使用SIGKILL,因为进程将立即被内核终止,没有机会进行清理。它甚至不会收到信号-它只是停止存在。
(如果您有权限杀死进程,使用kill -9总是有效的。在某些特殊情况下,进程仍然会在pstop中列出(作为“僵尸”)-在这种情况下,程序已被终止,但进程表项保留下来,因为稍后还需要。)

当鼠标停止工作时:

如果键盘仍然工作,请按下Alt+F2并运行gnome-terminal(或者,如果无法启动,请按下Alt+Ctrl+F1并使用您的用户名密码登录)。从那里您可以进行故障排除。我不会在这里讨论鼠标故障排除,因为我还没有研究过。如果您只想尝试重新启动GUI,请运行sudo service lightdm restart。这将关闭GUI,然后尝试重新启动,将您带回登录界面。

当您拥有Intel Bay Trail CPU时

请参考https://askubuntu.com/a/803649/225694

当所有东西,包括键盘和鼠标,都停止工作时:

首先尝试Phoenix' answer中提到的魔法SysReq方法。如果这不起作用,按下计算机箱上的重置按钮。如果连这个都不起作用,你只能重新启动机器了。
愿你永远不会遇到这一点。

10我最近发现,与上面提到的“ps $options | grep $process_name”相比,只需输入“pgrep $process_name”即可获得大致相同的结果(对于某些值的$options)。 - koanhead
@Chan-Ho Suh 无法启动并不是真正的“冻结”。我们在http://askubuntu.com/questions/162075/my-computer-boots-to-a-black-screen-what-options-do-i-have-to-fix-it中涵盖了无法启动的问题。或者你是指登录时的冻结吗? - Jjed
7一定不要一开始就建议使用kill -9。而是应该先尝试使用较温和的信号来终止进程,只有在其他方法都失败的情况下才使用-9。 - Scott Severance
当系统冻结时,为什么REISUB很有用?除了重新启动之外,我找不到能使我恢复控制的选项。谢谢~ - sam
2sudo service lightdm restart: 不太好 - 至少会在Ubuntu 13.04中杀死所有GUI进程 - 对我来说,包括运行虚拟机等 :( - Stephen
如果存储介质(尤其是闪存卡/闪存盘)在持续使用时出现临时卡顿的情况,您可以尝试将分配给脏数据的内存减少到约4 MB。在/etc/sysctl.conf中写入vm_dirty_bytes = 4194304和vm.dirty_background_bytes = 1048576,同时将等待时间减少到3秒,即vm.dirty_expire_centisecs = 300和vm.dirty_writeback_centisecs = 300(增加缓冲区会使卡顿时间更长且更不频繁!) - iugamarian
@sam 在 REISUB 中的 SU 负责在重新启动之前确保硬盘写操作完成,以避免不一致和未完整写入的数据。在系统以某种低级方式“几乎挂起”的情况下,硬盘写入可能需要很长时间。 - Volker Siegel
@ScottSeverance 非常正确 - 但是答案说先尝试不带信号的kill命令。这将使用默认信号SGTERM,在尝试SIGKILL之前,我认为这是正确的做法。 - Volker Siegel
对于在终端中未运行的命令,无需尝试 SIGHUP,它表示连接已断开("挂起"),就像在拨号调制解调器连接上看到 CARRIER LOST 时一样。 (某些守护进程会重新读取配置文件 SIGHUP。)默认信号 SIGTEM 告诉程序“尽快终止”,以便进行重要的清理工作。 SIGKILL 不会告诉程序任何信息 - 它告诉内核“删除该程序” - 因此它只是停止存在。它将永远不会获得下一个 CPU 周期。因此它不能做任何事情,因为它永远不会发现自己将停止存在。(我会编辑。) - Volker Siegel
6希望你永远不会遇到这个问题。在大多数Linux系统中,这是唯一会出现的问题。我从未见过一个可以修复的Linux系统冻结。 - Chris Vilches
2我必须说,这个Alt+F2,输入xkill的操作太疯狂了,我之前不知道它,完全拯救了今天。 - revolutionary
1出门的时候记得把电源开关关掉,每次都有效哦 ;) - nodws
当只有键盘停止工作时,任务栏和当前窗口停止响应吗? - danilo

你可以通过快捷键 Ctrl+Alt+Delete 打开系统监视器,从而可以关闭任何无响应的应用程序。
  1. 打开系统 ➜ 首选项 ➜ 键盘快捷键,然后点击添加
    命令字段中输入gnome-system-monitor。将快捷方式命名为您想要的任何名称。

enter image description here

点击“应用”,然后点击“禁用”。现在按下键盘上的Ctrl+Alt+Delete键。

enter image description here

关闭键盘快捷键,然后尝试使用快捷方式:

enter image description here


9但是如果X完全锁定,甚至内核挂起,你无法通过键盘快捷方式做太多事情。 - nanofarad
29很遗憾,系统监视器对 CPU 的需求相当高。它通常会占用我的 CPU 高达 20%,所以如果你的电脑已经负荷过重,启动系统监视器只会让它更快地变得不堪重负。 - Cerin
4如果你可以打开“系统监视器”,那就可以进入终端,这样的话你的操作系统就没有冻结。 - nbm
2系统监视器很遗憾地并非像 Windows 上值得信赖的任务管理器那样。正如上面所评论的那样,它只会在 Ubuntu 没有冻结的情况下启动(具有讽刺意味)。即使它启动了,它也是无响应的。 - ksoo
另一种方法是打开终端并从那里使用top命令。资源消耗较少。 - nocibambi
这是在KDE Plasma中启用Ctrl + Alt + Backspace重新启动X服务器的位置。https://forum.endeavouros.com/uploads/default/original/3X/4/1/4146cfde3dca58a8bfba621ebbab0122bbebcd6b.png - nulll

您所描述的冻结可能与软件和硬件有关,有时很难诊断。

硬件

如果这是台式电脑,请查看您的硬件卡。对于笔记本电脑和台式机,可能存在acpi类型问题。

暂时简化配置只连接标准键盘和鼠标的图形卡可能会有用。应拆下所有其他卡。

对于与acpi相关的问题,请尝试通过grub引导选项的noapic nomodeset启动。也值得尝试acpi=off,但这可能会产生其他不良影响,如风扇持续使用。

还应检查BIOS版本级别,并查看供应商是否有更新的BIOS版本。读我笔记中应该会显示新版本是否修复了崩溃和冻结问题。

软件

我注意到您尝试过标准的270驱动程序,但由于冻结而失败。请问您是否与开源驱动程序有类似的问题?显然,在测试期间不会获得Unity。

图形冻结可能是驱动程序/ Compiz / X /内核中的一个或多个的组合。

如果您愿意尝试以下建议,请首先使用像CloneZilla这样的好的备份工具备份您的系统。您需要一个外部媒体设备来接收镜像,例如大容量的USB闪存驱动器或独立的内部硬盘。

安装更新的nVidia驱动程序

使用“附加驱动程序”窗口停用(卸载)当前的173-nvidia驱动程序。

在275稳定版中有一些重要的修复,但在280beta版本中也有一些修复了冻结问题 - 值得一试,看看是否适用于您的显卡。不幸的是,NVIDIA没有详细说明它们具体修复了哪些显卡(readme.txt)

然而 - 我强烈建议您备份数据,除非您对撤销nvidia安装感到自信 - 尤其是因为稍旧的270驱动程序给您带来了严重问题。我已经多次使用过clonezilla,并且它总能帮我解决麻烦。不过您确实需要一个大容量的外部驱动器 - USB闪存驱动器/外部驱动器或独立驱动器。

X 更新

最新的图形驱动程序已经打包在x更新ppa中。

注意 - 这将使您远离标准基线 - 如果将来升级,请先使用ppa-purge清除PPA本身。
您还可以手动安装nVidia的驱动程序:
尝试安装最新的nvidia稳定版275或280驱动程序 - 32位 280驱动程序:ftp站点64位 280驱动程序:ftp站点 安装方法 CTRL + ALT + F1 切换到TTY1并登录
sudo service gdm stop

停止X服务器
sudo su

以root身份运行
cd ~/Downloads
sh NVIDIA-Linux-x86-280.04.run

安装32位驱动程序(相当于64位),然后重新启动。
卸载方法:
sudo sh NVIDIA* --uninstall

还要删除/etc/X11/xorg.conf

X/Kernel/Compiz

如果你在运行带有特效的经典Ubuntu时遇到了相同的冻结问题,那么这可能是一个compiz问题。我建议你向compiz团队提交一个launchpad bug报告。

如果有空间(例如20Gb),你可以在最新的oneiric alpha旁边进行双重引导/安装。显然,这本身就是不稳定的,但它将配备最新的X和内核。由于可能不会在“附加驱动程序”窗口中提供beta 280图形驱动程序,您可能还需要手动安装它们。

如果在测试过程中没有看到相同的冻结活动,您可以尝试使用x-edgers ppa升级您的X版本,并在Natty中使用3.0内核。这种方法并不理想-并且可能导致您在将来升级时出现问题-并且可能存在其他未预料到的稳定性问题。再次使用ppa-purge来删除PPA。

Kernel 3.0已经打包在PPA中 - 如果您打算稍后安装NVIDIA驱动程序,您需要在重新启动之前从synaptic安装头文件以及内核本身。 这是一个测试ppa - 如果您想尝试这条路线,请确保已备份好数据。

你确定这是个好主意吗?它能解决问题吗?还是只是猜测而已?因为我之前使用nvidia-current遇到了很多麻烦,什么方法都没用……所以我换成了nvidia-173。我能不能直接从CloneZilla备份中恢复整个系统?问题是我没有多余的硬盘来存放系统副本了…… - RobinJ
我会尽力的...虽然我没有硬盘来备份,所以我只能希望它不会破坏我的整个系统。关于使用测试版软件感到不舒服的问题:目前我正在使用Ubuntu 11.10 Alpha 3 xD 但是在工作中,我只使用Ubuntu 11.04,因为我不需要经常遇到错误和崩溃,特别是在制作网站或类似的工作时 :p - RobinJ
哦,亲爱的 xD 我安装了NVidia-275驱动程序,并重新启动。X不再启动了。没问题,在查看日志文件后,我发现另一个驱动程序已经在使用该设备。我将nouveau添加到modprobe黑名单中,重新启动,X又开始工作了...但是现在我又遇到了另一个问题...我能看到Unity界面,然后一切都冻结了 :p 我可以切换到tty并运行命令,但似乎Unity和窗口管理器/装饰器崩溃了。我无法切换回Gnome Panel(老实说,我也不想切换回去)... - RobinJ
...因为几周前我故意杀掉了它(因为它与Unity面板一起运行,原因很奇怪 :p)。不要告诉我去使用Unity 2D,因为它也不太好用,对我来说不容易。事实上,Unity是我仍然安装非开源驱动程序的唯一原因。所以请帮帮我?xD - RobinJ
我已经做了那个,除了重新启用nouveau,因为我不认为它有什么用。但是我是指请帮我解决冻结的问题。 - RobinJ

如果你经常遇到电脑卡死的情况,可能是硬件出了问题。我以前由于一些不太理想的内存,每48小时就会出现严重的系统锁死。经过40分钟的测试,Memtest86+显示了故障。我将内存更换为更好的(在保修期内),现在已经连续运行32天1小时了。
Ubuntu不像Windows那样随着时间的推移会占用大量内存。即使一个应用程序或者一个糟糕的X视频驱动导致内存泄漏,你只需要简单地重新启动LigthtDM,就可以继续使用。在这个引导过程中,我实际上已经使用了三个nvidia驱动的beta版本 :)
无论如何...虽然知道如何软重启非常方便,但找到、报告和修复系统问题应该是你的下一个优先事项。如果是一个始终开机的系统,在内核更新之间应该很容易做到不需要重启。
*当你收到内核更新时,你应该重启,因为它们是安全补丁,只有在你进入新内核后才会生效。

1我同意RAM通常是不稳定系统的罪魁祸首。我曾经遇到过一个问题,Memtest86+无法发现,但我可以在5分钟内反复运行sha1sums来触发它(校验和不时改变)。这个问题也是通过更换内存条解决的。其他常见原因是电源不稳定或主板上的电容器质量差。唯一诊断这些问题的方法就是不断更换零件直到问题解决。 - Mikko Rantalainen
1+1 for memtest86。在日常使用中,内存可能存在故障,而你可能并没有真正注意到它。 - jmiserez

当一切都停止工作时,首先尝试使用Ctrl + Alt + F1进入终端,在那里你可以杀掉X或其他问题进程。
如果连这个也不起作用,试着按住Alt + SysReq同时按下(慢慢地,每次之间有几秒钟的间隔)R E I S U B
这将使键盘进入原始模式,结束各种状态的任务,同步磁盘等,最后重新启动机器。 与其直接拔插头相比,这样做会得到更好的结果。当然,如果这也失败了,你基本上只能拔插头了。

10记住"REISUB"的一种方法是"即使系统彻底崩溃也重新启动"。 - Matthew Crumley
7养大象真是无聊得要死 :P - Axel
9我记得它是用“BUSIER”倒过来的 - Nerdfest
5在按下Ctrl+Alt+F1并尝试终止进程以及Alt+SysRq+R E I S U B之间,值得按下Ctrl+Alt+Delete。如果您成功进入基于文本的虚拟控制台(通过按下Ctrl+Alt+F1),这几乎总是会重新启动机器。 - Eliah Kagan
更加直接,用西班牙语来说:REInicia SUBnormal - Ramon Suarez
天啊。REISUB 是不能忽略的哈哈哈。 - chx101

有时候,问题可能只是X服务器挂起了 - 这种情况我最常见的是在使用Compiz时发生。
如果是这种情况,你可以杀掉X服务器,它会重新启动并将你带回登录界面。
默认的组合键是Ctrl + Alt + Backspace 尽管默认情况下这个功能被关闭了(可能是因为新用户经常不小心按到它),但你可以通过以下步骤重新开启:
1. 点击系统键盘(即键盘首选项对话框) 2. 切换到布局选项卡 3. 点击选项按钮 4. 在用于终止X服务器的键序列处勾选Ctrl + Alt + Backspace

3如果您的视频驱动程序使用了内核模式设置(KMS),那么这很可能不足以解决系统卡死的问题,您需要使用sysrq或重新启动电源。 (尽管可以尝试C-A-B,显然它不会有任何损害,当应用程序(如compiz/unity)卡住而不是X本身时,它确实有效,但在这种情况下,本页面上的其他回答可能更好)。 但当它不起作用时,现在你知道原因了。 :-) - Bryce
对于新用户的一条关于KMS的注释:作为一个普遍规则,如果您正在使用二进制驱动程序(可能是如果您有一张nVidia显卡,并且有时候如果您有一张ATI显卡),那么您的视频驱动程序没有在使用KMS。 - thomasmichaelwallace
我在Ubuntu 14.04中找不到这个选项。当我进入“设置”>“键盘”时,只有“输入”和“快捷键”两个标签。我刚刚浏览了所有的快捷键,但没有找到“用于关闭X服务器的按键序列”。在14.04上还能实现这个功能吗? - Andy

当完全冻结发生时,我首选的组合键是 - Alt + SysRq + K

这个组合键将杀掉 X,并将我返回到图形登录界面。如果这不起作用,请尝试使用 Alt + SysRq + R E I S U B


DoR和Phoenix已经回答得很好。为了使这个页面更完整,我想补充一下:
如果只有X出现问题,你可以使用内核来终止它:
SysRq + Alt + K
对于笔记本电脑(取决于型号,通常需要在"SysRq"上标有蓝色字样):
Fn + SysRq + Alt + K(按下SysRq后释放Fn键)。

就我所知,这取决于笔记本电脑——在我的ThinkPad上,Alt+SysRq键组合不需要按下Fn键或Ctrl键。 - Marius Gedminas

在这种情况下,你可以尝试使用CTRL-ALT-F1组合键进入控制台。然后使用密码登录。

重启图形界面

你可以尝试使用以下命令来重启你的图形桌面:

sudo service lightdm restart

如果你使用的是Ubuntu 11.04或更早版本,你应该使用这个(因为gdm曾经是默认的显示管理器):
sudo service gdm restart

如果你使用的是Kubuntu,那么默认的显示管理器是kdm,所以你应该使用以下命令:
sudo service kdm restart

如果您使用其他显示管理器,请将ligthdm/gdm/kdm替换为其名称。
重新启动机器
如果您想进行干净的系统重启,请使用:
sudo shutdown -r now