如何杀死顽固进程

如何杀死顽固进程

我有一个不会死的烦人的进程:

ps -A | grep "nzbget" 

给我:

11394 pts/3    00:00:00 nzbget

如果我尝试:

pkill nzbget (or 11394)

...我没有得到任何回应,该过程仍然存在,顶部给了我:

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
11394 asystem+  20   0  125448   6244   4984 T   0.0  0.1   0:00.00 nzbget

我用“nzbget -s”运行 nzbget,如果我在它运行后执行此操作(并且我试图阻止它),我会收到 [绑定套接字失败] 错误,我所能做的就是重新启动。

我怎样才能在不重新启动的情况下杀死它?

答案1

当进程停止*(请注意T中的状态输出top)时,它根本无法执行任何信号处理。因此,您需要使用不需要进程交互的信号,在您的情况SIGKILL(9) 中,如下所示

kill -9 11394

如果您出于某种原因想要获取进程的核心转储(并且您的系统已为此进行配置),则可以改用SIGSEGV(11)。这也不需要任何进程交互。

* 我假设在这里停止,因为跟踪的进程应该能够处理信号,这可能导致进程被停止。

答案2

您可以使用kill -9 11394不优雅地完全终止进程,这将调用以下命令:

Linux/UNIX 命令行上 3 个最重要的“kill”信号:

内核将释放该进程而不通知该进程。像这样不干净的杀戮可能会导致数据丢失。这是可用的“最难”、“最粗暴”和最不安全的杀戮信号,只能用于阻止似乎无法阻止的事情。

答案3

您可以尝试多种信号,我相信其他人会列出这些信号,但我发现最有效的信号是HUP

kill -hup 11394

我发现这在很多应用程序不响应任何其他信号的情况下都有效。如果失败,您可以这样做kill -9,尽管这可能会产生副作用,因为它只是拔掉插头并且不会让应用程序清理。

答案4

对于 X 应用程序,我很幸运地使用 xkill 并在应用程序无法响应命令行的终止时单击其窗口

相关内容