当 Ctrl-C 无法终止正在运行的作业时该怎么办?

当 Ctrl-C 无法终止正在运行的作业时该怎么办?

Ctrl有时,进程会忽略 Bash 中-发送的 SIGINT 信号C。例如,manvi。假设你不想谷歌搜索或阅读手册来了解如何退出正在运行的进程,是否有任何键序列可以总是工作(无需离开终端)?

答案1

发送信号退出Ctrl+发出信号\

.. $ sleep 10
^\Quit

→ 这相当于kill -3 pid。在用户空间运行的程序不会忽略sigquit。

还有一组魔法 SysRq键盘快捷键。其中一个比较有趣的是:Alt+ SysRq+ k。它会杀死当前虚拟控制台上的所有进程。如果你的一个 tty 完全坏了,这可以用来回去在运行 X.org 的 tty 上,它可以用于毫不留情地杀死 X。

在大多数键盘上,SysRq 键与 Print 键相同。在我的笔记本上,可以使用 Fn 键调用它;即按 Alt→Fn→Print→k 顺序。

以下是一些基本的进程管理快捷方式:

  • Ctrl+ Z:暂停进程(加号bg可在后台恢复,fg升至前台)
  • Ctrl+ C:礼貌地要求进程立即关闭
  • Ctrl+ \:毫不留情地杀死当前在前台的进程
  • Alt++ SysRqs将数据写入磁盘(在删除任何重要文件之前务必执行此操作)
  • Alt++ SysRq, sk无情地杀死给定虚拟控制台上的所有当前进程
  • Alt++ SysRq, sb无情地重启而不卸载,
  • Alt++ SysRq, r, e, , :安全isubr启动fs系统是完全b罗肯,

注意:Ctrl+与+和+Z相反,也适用于、、等。CtrlCCtrl\manviless

如有疑问,以下步骤几乎总是有效的:

~$ sleep 10
^Z
[5]+  Stopped              sleep 10
~$ ps
  PID TTY          TIME CMD
 4804 pts/0    00:00:00 bash
 6207 pts/0    00:00:00 sleep
 6208 pts/0    00:00:00 ps
~$ kill -9 6207
[5]+  Killed                  sleep 10
~$ 

^Z 当然表示已按下Ctrl+ 。Z


要更深入了解 Shell 和终端,还请参阅我的回答:

答案2

您可以尝试Ctrl+\

答案3

有时CTRL+C会被发送到错误的程序或输入通道。这种情况在编辑器中尤其常见,例如vi、带有管道输出的命令、涉及循环的复杂 bash 命令等。

一个简单、快速的解决方案是暂停作业CTRL+Z,然后通过作业编号将其终止:kill %1kill -9 %1等。

答案4

您可能已将复制的快捷方式从以下位置更改:

CTRL+ SHIFT+C

CTRL+C

这样,当您尝试终止一个进程时,CTRL+C就不起作用。

尝试将复制快捷方式替换为CTRL+ SHIFT+ C

相关内容