Ctrl+C并不总是能终止当前进程(例如,如果该进程正忙于某些网络操作)。在这种情况下,您只能在光标旁看到“^C”,而无法执行其他操作。
在不丢失终端的情况下强制该进程终止的最简单的方法是什么?
答案1
Ctrl要理解为什么+C不起作用的问题,了解按下它时发生的情况非常有帮助:
内核 tty 驱动导致Ctrl+ C“发送一个信号情报信号到附加的进程。您可以通过以下方式了解不同的信号人信号:
SIGINT 2 Term Interrupt from keyboard
程序可以忽略该信号,就像它们可以忽略信号传输协议以及:
SIGTSTP 18,20,24 Stop Stop typed at tty
Ctrl(当您按下+时大多数 shell 都会执行此操作Z,这就是为什么不能保证它能正常工作。)
有一些信号是进程不能忽略的:终止信号,停止信号以及其他一些。您可以通过杀命令。因此,要终止挂起/僵尸进程,只需找到进程 ID(PID)。例如,使用pgrep
或ps
然后kill
它:
% kill -9 PID
答案2
如果Ctrl+ C(SIGINT) 不起作用,请尝试Ctrl+ \(SIGQUIT)。然后尝试Ctrl+ Z(SIGTSTP)。如果返回到 shell 提示符,请kill
在进程 ID 上执行。(默认为 SIGTERM 信号,您可以使用 指定kill -TERM
。在某些 shell 中,您可能能够使用%1
它来引用 PID。)如果不起作用,请转到另一个终端或 SSH 会话并在进程 ID 上 执行kill
或。kill -TERM
只能作为最后的手段您是否应该这样做kill -KILL
,kill -9
因为它没有给该过程任何机会干净地中止、同步其打开的文件、删除其临时文件、关闭网络连接等。
答案3
答案4
通常情况下,您仍然可以停止该过程 ( Ctrl+ Z),然后使用kill -9
。对于kill -9
,您需要进程 PID首先。对于后台作业,kill -9 %1
这是最简单的方法 - 如果您不确定要终止的后台作业数量,请运行jobs
。
或者,你可以使用以下命令查找进程 ID
ps
然后你可以运行
kill -9 <Appropriate PID from ps output>