当Ctrl-C不会杀死正在运行的作业时该怎么办?
有时,进程会忽略Bash中Ctrl – C发送的SIGINT信号。 例如, man
和vi
。 假设您不想谷歌或阅读有关如何退出正在运行的过程的手册,是否有任何键序列始终有效(不离开终端)?
使用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 + s , k :无情地杀死给定虚拟控制台上的所有当前进程
- Alt + SysRq + s , b :无需卸载就无情地重新启动,
- Alt + SysRq + r , e , i , s , u , b :安全地开始使用系统,这是一个很好的方式,
注意:与Ctrl + C和Ctrl + \相比, Ctrl + Z也适用于man
, vi
, less
等。
如有疑问,以下程序几乎总能奏效:
~$ 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 %1
或kill -9 %1
等。
-
尝试以下方法之一:
Ctrl + 4
Ctrl + \
-
要么:
按Ctrl + Z然后运行:
kill %1
其中%1
是按Control – Z时返回的作业数。 添加-9
以强制杀死。
当您在文本控制台中时,您还可以尝试: Ctrl – SysRq 。 内核应该杀死进程。
或者SysRq -k ,杀死当前虚拟控制台上的所有进程(也可以杀死X和svgalib程序)。
注意:当使用魔术SysRq键杀死冻结的图形程序时,程序无法恢复文本模式。 这可能使一切都变得不可读。
请参阅: Magic SysRq键及其命令组合。
要退出男人 ,请使用q
离开vi使用:q
尝试Ctrl + Alt + Backspace
如果您使用的是ubuntu 10.04,则需要启用此密钥才能正常工作。
启用Control – Alt – Backspace
转到系统 – >首选项 – >键盘
选择“ 布局”选项卡 ,然后单击“ 布局选项” 。
选择Key sequence以终止X服务器并启用Control + Alt + Backspace 。
注意:
按Ctrl – Alt – 退格键将重新启动X服务器。
你有可能改变了副本的快捷方式:
CTRL + SHIFT + C.
至
CTRL + C.
这样,当您尝试终止进程时, CTRL + C不起作用。
尝试将复制快捷方式替换为CTRL + SHIFT + C.