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

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

使用Ctrl + \发送SIGQUIT信号。

 .. $ sleep 10 ^\Quit 

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

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

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

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

  • Ctrl + Z :暂停一个进程(加上bg在后台恢复, fg前台)
  • Ctrl + C :礼貌地要求进程立即关闭
  • Ctrl + \ :无情地杀死当前在前台的进程
  • Alt + SysRq + s :将数据写入磁盘(在杀死任何重要内容之前始终执行此操作)
  • Alt + SysRq + sk :无情地杀死给定虚拟控制台上的所有当前进程
  • Alt + SysRq + sb :无需卸载就无情地重新启动,
  • Alt + SysRq + reisub :安全地开始使用系统,这是一个很好的方式,

注意:与Ctrl + CCtrl + \相比, Ctrl + Z也适用于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和Terminals,请参阅我的答案:

  • 什么是贝壳?
  • 为什么虚拟终端“虚拟”,什么/为什么/在哪里是“真正的”终端?

你可以试试Ctrl + \

有时CTRL + C被发送到错误的程序或输入通道。 这对于vi等编辑器尤其常见,其中包含带有管道输出的命令,涉及循环的复杂bash命令等。

一个简单,快速的解决方案是暂停作业CTRL + Z然后按作业号杀死它: kill %1kill -9 %1等。

  • 尝试以下方法之一:

    Ctrl + 4

    Ctrl + \


  • 要么:

    按Ctrl + Z然后运行:

    kill %1

其中%1是按ControlZ时返回的作业数。 添加-9以强制杀死。


当您在文本控制台中时,您还可以尝试: CtrlSysRq 。 内核应该杀死进程。

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

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

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

要退出男人 ,请使用q离开vi使用:q

尝试Ctrl + Alt + Backspace

如果您使用的是ubuntu 10.04,则需要启用此密钥才能正常工作。

启用ControlAltBackspace

转到系统 – >首选项 – >键盘

选择“ 布局”选项卡 ,然后单击“ 布局选项”

选择Key sequence以终止X服务器并启用Control + Alt + Backspace

注意:

CtrlAlt退格键将重新启动X服务器。

你有可能改变了副本的快捷方式:

CTRL + SHIFT + C.

CTRL + C.

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

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