中断已“挂起”并使 X 桌面无响应的 Linux 应用程序的高级策略

中断已“挂起”并使 X 桌面无响应的 Linux 应用程序的高级策略

当应用程序 (thunderbird) 出现问题时,有时它会进入无响应状态,其中会阻止 UI、阻止登录进程(在 tty 终端)并且还会阻止使用 Ctrl-Alt-Backspace 重新启动 X 会话。

通常在 *nix 盒子上,向进程发送信号足以让我返回足够的访问权限以重新获得控制权,但在这种情况下,一切都被破坏了,即使它只是一个使用大量 RAM 和交换的应用程序。

使用 Ctrl-Alt-F1 给了我一个控制台和登录提示,我可以输入 root 用户名,但它不会返回密码提示,所以我被卡住了。

Ctrl-Alt-Backspace 导致 X 会话重新启动,但它没有给我登录提示,并且需要重新启动电源。

是否有某种方法可以将击键绑定到某种低级“中断功能”(我的意思是一般意义上的)以暂停令人烦恼的挂起进程,以便我可以看到它正在尝试做什么strace

我隐约意识到某些阻塞进程在返回之前无法挂起,但在这种情况下,没有迹象表明阻塞进程被阻止访问任何 IO 资源,它只是看起来在做一些愚蠢的事情。

我原本想用一些 bash 脚本来 ionice 和 renice 与 Thunderbird 关联的任何进程到最低优先级,但我想如果事情像看起来那么糟糕,那么新进程将无法获得 CPU。

我想为此使用 Ctrl-Break 键,因为在我的计算机上的桌面会话期间它不用于其他任何操作。

基本上,桌面(缓慢)响应按键和鼠标,因此有一定范围运行命令以导致不良进程挂起,我只是不知道在这种情况下可以使用哪种命令。

答案1

我的猜测是 Thunderbird 消耗了大量内存。如果你能得到一个 shell/控制台,而不只是杀死进程。通常,如果您正在重建搜索索引或在缓存中加载数千封电子邮件,thunderbird 将挂起。

你还可以在 linux oom Killer 中设置优先级,/proc以便首先处理 SIGTERM。

我们先找到thunderbird的进程。 (使用您喜欢的任何内容:pgrepps -ef|grep …等)

bash$ pidof thunderbird
1439

现在要暂时停止该过程,您只需停止该过程即可:)

bash$ kill -s SIGSTOP 1439
bash$ strace ... 

一旦您满意,您就可以继续该过程,并发出“继续”信号。 :)

bash$ kill -s SIGCONT 1439

另外,如果它是一个线程,您可以考虑使用,tkill或者tgkill但您可能必须先安装它。

答案2

我不知道它是否会回答您问题的所有细节,但它会给您一些提示。

当我尝试知道某些程序行为不当的根本原因是什么时,就是从控制台运行它(我的意思是你运行GUI程序,但你从控制台启动它),这样你就可以知道它在做什么,因此您可以获得有关如何解决雷鸟问题的线索。

更具体地说,当我遇到像你提到的情况时,我在做什么,我通过 ssh 进入机器(是的,我可以登录,尽管我什至无法使用 Alt+F4 获取 tty1),然后使用 ,topps ax | grep thunderbird杀死程序后,桌面(包括 X 和所有其他打开的窗口)又恢复正常。

我知道它并不完全触及您在问题中绘制的正确位置,但我给出了我所拥有的。

答案3

我怀疑你的分析有问题。你真的还在运行单核CPU吗?我怀疑发生了比失控进程更基本的事情(在单个核心盒上),尽管有可能某些事情导致系统运行非常缓慢。

当然,一旦问题出现,您就无法访问运行任何诊断程序,这也无济于事。

我会禁用 ACPI/APM(以防时钟缩放产生一些影响)并运行进程监控程序尝试捕捉该事件。

您可能会考虑使用看门狗在仅监视模式 (-q) 下触发诊断。

相关内容