Dus*_*ell 202 linux bash shell
Ctrl+C并不总是可以杀死当前进程(例如,如果该进程在某些网络操作中很忙)。在这种情况下,您只能通过光标看到“^C”而不能做其他事情。
在不丢失终端的情况下强制该进程立即终止的最简单方法是什么?
答案总结:
通常,您可以Ctrl+Z将进程置于睡眠状态,然后执行kill -9 _process-pid_,在那里您可以使用ps和其他工具找到进程的 pid 。在Bash(也可能是其他 shell)上,您可以kill -9 %1(或一般情况下使用 '%N'),这更容易。如果Ctrl+Z不起作用,您将不得不打开另一个终端并从那里杀死。
aki*_*ira 137
要了解为什么Ctrl+C不起作用的问题,了解按下它时会发生什么非常有帮助:
大多数 shell 绑定Ctrl+C以“向当前在前台运行的程序发送SIGINT信号”。您可以通过man signal了解不同的信号:
SIGINT 2 Term Interrupt from keyboard
Run Code Online (Sandbox Code Playgroud)
程序可以忽略该信号,因为它们也可以忽略SIGTSTP:
SIGTSTP 18,20,24 Stop Stop typed at tty
Run Code Online (Sandbox Code Playgroud)
(这是大多数 shell 在您按下Ctrl+时所做的事情Z,这就是它不能保证工作的原因。)
有一些信号不能被进程忽略:SIGKILL、SIGSTOP和其他一些。您可以通过kill命令发送这些信号。因此,要终止挂起/僵尸进程,只需找到进程 ID (PID)。例如,使用pgreporps然后kill它:
% kill -9 PID
Run Code Online (Sandbox Code Playgroud)
Ted*_*ddy 127
如果Ctrl+ C(SIGINT) 不起作用,请尝试Ctrl+ \(SIGQUIT)。然后尝试Ctrl+ Z(SIGTSTP)。如果这使您返回到 shell 提示符,请kill对进程 ID 执行操作。(默认为SIGTERM信号,您可以用指定kill -TERM。在一些炮弹,你可以使用%1来指代PID)。如果不工作,去到另一个终端或SSH会话并做kill或kill -TERM上进程标识。 只有作为最后的手段,你才应该这样做kill -KILL,也就是kill -9,因为它不会给进程任何机会彻底中止、同步其打开的文件、删除其临时文件、关闭网络连接等。
小智 46
也请参阅此链接。
Ctrl+ Z:暂停进程。
Ctrl+ C:礼貌地要求进程立即关闭。
Ctrl+ \: 无情地杀死当前在前台的进程
Dan*_*eck 33
按 Ctrl-Z暂停程序并将其置于后台:
Suspend the program currently running and put it in the background.
This does not stop the process as it does in VMS!
Run Code Online (Sandbox Code Playgroud)
(再次使用 恢复到前台fg)
然后,您可以kill或kill -9它,给定它的进程 ID(您从 中获得ps a)。
Oll*_*lli 13
通常,您仍然可以停止进程 ( Ctrl+ Z),然后使用kill -9. 对于kill -9,您首先需要进程 PID。对于后台作业,这kill -9 %1是最简单的方法 - 如果您不确定要终止的后台作业数量,请运行jobs.
或者,您可以使用以下命令找到进程 ID
ps
Run Code Online (Sandbox Code Playgroud)
然后你可以运行
kill -9 <Appropriate PID from ps output>
Run Code Online (Sandbox Code Playgroud)
1) 如果您在控制台上并处于多用户模式,您可以按 CTRL-ALT-Fn 并在另一个屏幕上登录,使用ps -ef | grep <myprocessname>或pidof <myprocessname>然后通过 ID 号杀死 -9 进程。
2) 如果您是远程连接,请通过另一个终端会话执行相同的操作。
您还可以通过安装htop让生活变得更轻松,它是 top 的更通用版本,允许您有选择地终止正在运行的进程。大多数发行版在存储库中都有 htop。
3) 如果您刚刚陷入挂起的 ssh 会话(例如,连接到另一个系统),请尝试按波浪号 (~),这是转义键,然后按 CTRL-Z 返回到主机会话,然后您可以终止卡住的 ssh 进程或等待其超时,这在一段时间不活动后大多数人都会这样做。
Bash(和其他 shell?)的一个更简单的解决方案是:
Ctrl-z followed by kill -9 %1
Run Code Online (Sandbox Code Playgroud)
其中“%1”是指被杀死的作业号。如果您已经有其他工作在休眠,则它可能是“%2”(或其他)。当您按 Ctrl-z 时,您可以看到它是哪个作业编号:
[1]+ Stopped <process name>
Run Code Online (Sandbox Code Playgroud)
请注意,'kill' 是 shell 版本的 kill,而不是 /bin/kill。