Ctrl有时,进程会忽略 Bash 中-发送的 SIGINT 信号C。例如,man
和vi
。假设你不想谷歌搜索或阅读手册来了解如何退出正在运行的进程,是否有任何键序列可以总是工作(无需离开终端)?
答案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++ SysRq:s将数据写入磁盘(在删除任何重要文件之前务必执行此操作)
- Alt++ SysRq, s:k无情地杀死给定虚拟控制台上的所有当前进程
- Alt++ SysRq, s:b无情地重启而不卸载,
- Alt++ SysRq, r, e, , :安全isubr启动埃文我fs系统是你完全b罗肯,
注意:Ctrl+与+和+Z相反,也适用于、、等。CtrlCCtrl\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 和终端,还请参阅我的回答:
答案2
您可以尝试Ctrl+\
答案3
有时CTRL+C会被发送到错误的程序或输入通道。这种情况在编辑器中尤其常见,例如vi
、带有管道输出的命令、涉及循环的复杂 bash 命令等。
一个简单、快速的解决方案是暂停作业CTRL+Z,然后通过作业编号将其终止:kill %1
或kill -9 %1
等。
答案4
您可能已将复制的快捷方式从以下位置更改:
CTRL+ SHIFT+C
到
CTRL+C
这样,当您尝试终止一个进程时,CTRL+C就不起作用。
尝试将复制快捷方式替换为CTRL+ SHIFT+ C。