如何杀死顽固的进程

aSy*_*oad 6 process kill

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

ps -A | grep "nzbget" 
Run Code Online (Sandbox Code Playgroud)

给我:

11394 pts/3    00:00:00 nzbget
Run Code Online (Sandbox Code Playgroud)

如果我尝试:

pkill nzbget (or 11394)
Run Code Online (Sandbox Code Playgroud)

...我没有得到任何回应,过程仍然存在,top 给我:

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
Run Code Online (Sandbox Code Playgroud)

我用'nzbget -s'运行nzbget,如果我在它运行后这样做(并且我试图停止它),我会收到一个[绑定套接字失败]错误,我所能做的就是重新启动。

如何在不重新启动的情况下关闭它?

Abr*_*as2 9

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

kill -9 11394
Run Code Online (Sandbox Code Playgroud)

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

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

  • +1:识别进程的 T 状态的唯一答案(到目前为止)。您还可以向进程发送一个 SIGCONT,任何排队的信号都将被传递。即,如果您已经运行了 pkill(并发送了 SIGTERM),如果您随后发送了 SIGCONT,则该过程将启动并发送 SIGTERM。 (6认同)

Chr*_*son 7

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

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

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