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

Oli*_*nde 121 command-line bash job-control

有时,进程会忽略Bash 中Ctrl-发送的 SIGINT 信号C。例如,manvi。假设您不想谷歌或阅读有关如何退出正在运行的过程的手册,是否有任何键序列始终有效(无需离开终端)?

Ste*_*zzo 174

使用+发送SIGQUIT信号。Ctrl\

.. $ sleep 10
^\Quit
Run Code Online (Sandbox Code Playgroud)

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

还有一组Magic SysRq键盘快捷键。其中一个更有趣的是:Alt+ SysRq+ k。它会杀死当前虚拟控制台上的每个进程。如果您的 ttys 中的一个完全损坏,则可以使用它返回。在运行 X.org 的 tty 上,它可以用来毫不留情地杀死 X。

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

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

  • Ctrl+ Z: 暂停一个进程(加上bg在后台恢复,fg提升到前台)
  • Ctrl+ C: 礼貌地要求进程立即关闭
  • Ctrl+ \: 无情地杀死当前在前台的进程
  • Alt+ SysRq+ s:将数据写入磁盘(在杀死任何重要的东西之前总是这样做)
  • Alt+ SysRq+ s, k: 无情地杀死给定虚拟控制台上的所有当前进程
  • Alt+ SysRq+ s, b: 无情地重启而不卸载,
  • Alt+ SysRq+ reisub:安全ř EBOOT Ë VENF中的š ystem是ü tterly b roken,

注意:Ctrl+ZCtrl+CCtrl+ 不同\,也适用于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
~$ 
Run Code Online (Sandbox Code Playgroud)

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


要更深入地了解外壳和终端,另请参阅我的回答:

  • 您还可以执行 `kill %%` 来终止最后一个作业和 `kill %5`,其中 5 是 `jobs` 中显示的作业编号。 (5认同)
  • 当我的键盘布局中没有 `\ ` 键时,如何按 `Ctrl`+`\ `? (4认同)
  • 适用于“sleep 10”,但仍不适用于“man”或“vi”。显然“kill -9 pid”确实可以杀死两个进程。我错过了什么吗? (3认同)
  • **Ctrl+Z** 适用于less、man、vi 等。然后,您可以通过执行 `ps` 来查看他们的进程 id 并使用 `kill pid` 杀死它们,或者,如果您不关心程序的其他实例,则可以使用 `killall vi`。无论如何,Ctrl-Z 似乎总是有效。 (3认同)
  • Ctrl-\ 发送 **SIGQUIT**,而不是 SIGKILL。SIGQUIT 和 SIGKILL 之间有一些重要的区别。http://en.wikipedia.org/wiki/SIGQUIT (3认同)

Ben*_*min 16

你可以试试Ctrl+\

  • 不适用于“man”或“vi”。 (2认同)

tyl*_*erl 10

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

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


ken*_*orb 8

  • 尝试以下方法之一:

    Ctrl+4

    Ctrl+\


  • 或者:

    Ctrl+Z然后运行:

    kill %1

%1按下Control-时返回的作业数量在哪里Z。添加-9以强制杀死。


当您在文本控制台中时,您还可以尝试:Ctrl- SysRq。内核应该终止进程。

或者SysRq- k,杀死当前虚拟控制台上的所有进程(也可以杀死 X 和 svgalib 程序)。

注意:当使用魔法 SysRq 键杀死冻结的图形程序时,该程序没有机会恢复文本模式。这会使一切变得不可读。

请参阅:Magic SysRq 键及其命令组合。