可能重复:
当 ctrl-c 无法终止进程时该怎么办?
在笔记本电脑上,我按下笔记本电脑功能键 + break。在台式机上,我的 break 键(位于打印屏幕旁边)如下所示:
Pause
Break
如果我按下它(没有 Ctrl/Alt/等),我会得到这个(忽略回声,它们只是在那里,这样我才能弄清楚是什么):
# sleep 10;echo "no ctrl/alt/shift/etc"
[12]+ Stopped sleep 10
如果我按下 Shift 键,则会得到以下结果:
[root@ID6052 public_html]# sleep 10;echo "shift + pause/break"
[13]+ Stopped sleep 10
如果我按下 Ctrl 键,什么也不会发生。
如果我使用 Alt 按下暂停/中断键,则会得到以下结果:
[root@ID6052 public_html]# sleep 10;echo "alt + pause/break"
[15]+ Stopped sleep 10
我如何让它停止程序?如果我获得正在运行的进程列表,所有这些“[xx]+ Stopped...”命令都会显示出来(处于停止状态)。在我的笔记本电脑上,按下 func+break(即,只是普通的 break 键...func 按钮也用于滚动锁定、打印屏幕等)会完全关闭程序!
答案1
通常,unix shell 有以下键映射
control-C => SIGINT (中断)
control-Z => SIGTSTP (终端停止/暂停)
有时还有
control-y => 延迟停止(不确定如何实现)
Control-C 将通常中断并终止程序。但 SIGINT 可以被程序处理和忽略或处理。
Control-Z 将通常暂停(停止)你的程序。但是 SIGSTSP 也可以被程序处理和忽略或处理,尽管在实践中这种情况似乎比处理 SIGINT 要少见。
发送 SIGSTOP(kill -STOP
从另一个终端)将暂停(停止)您的程序并且无法处理。
看起来导致程序“停止”的组合键可能相当于 Control-Z。
如果您让进程处于停止状态,您的 shell 会报告作业编号。看起来您可能正在使用 bash。无论如何,大多数 shell 都会让您使用作业编号来控制已停止或后台的作业。
kill -KILL %1
kill -9 %1
bg %1
fg %1
依此类推,分别杀死、杀死、置于后台或置于前台你的(第一个)工作。
您可以使用命令
jobs
列出当前与您所在的 shell 关联的作业。嗯,取决于它是哪个 shell,您没有指定。
答案2
尝试: control-C
答案3
您可以使用Ctrl-C在终端中结束程序的执行。
您可以使用以下命令终止已停止的程序kill
:
kill PID
进程 ID 在哪里PID
(您将在输出中看到的数字ps
):
[约翰@awesome]$python Python 2.4.3(#1,2008 年 9 月 17 日,16:04:01) Linux 上的 [GCC 4.1.2 20071124 (Red Hat 4.1.2-41)] 输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。 >>> [1]+ 已停止 Python [约翰@awesome]$ps PID TTY 时间命令 3560 分/1 00:00:00 猛击 3588 分/1 00:00:00 python 3609 分/1 00:00:00 分
不使用kill
任何开关与使用 相同-TERM
。它将尝试正常关闭程序。如果它仍然没有响应,您可以kill
使用 强制关闭它kill -9
,但不建议这样做,因为它可能会留下打开的缓冲区的文件。
答案4
从 Unix 终端中断正在运行的程序主要有两种方法:
- Ctrl-c将发送一个 INT(中断)信号,默认情况下这将使程序退出,但有些程序会覆盖这一点。
- Ctrl-\将发送一个 QUIT 信号,这通常会导致程序停止运行,但通常不会干净地退出。
如果这些不起作用,请使用Ctrl-z键暂停程序(或切换到另一个终端),然后使用命令向程序kill
发送TERM
或KILL
信号(按此顺序)。后者将总是当程序下次有机会运行时终止程序(这并不总是立即运行,例如如果它正在从网络文件中读取)。