我有一个不会死的烦人的过程:
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,如果我在它运行后这样做(并且我试图停止它),我会收到一个[绑定套接字失败]错误,我所能做的就是重新启动。
如何在不重新启动的情况下关闭它?
由于进程已停止*(注意T
中的状态输出top
),它根本无法进行任何信号处理。因此,您需要使用不需要进程交互的信号,在您的情况SIGKILL
(9)中,如下所示
kill -9 11394
Run Code Online (Sandbox Code Playgroud)
如果您想,无论出于何种原因,获取进程的核心转储(并且您的系统已为此配置),您可以改用SIGSEGV
(11)。这也不需要任何进程交互。
* 我假设在这里停止了,因为被跟踪的进程应该能够处理信号,这可能会导致进程被停止。
您可以使用kill -9 11394
来完全不雅地终止进程,这将调用以下内容:
来自Linux/UNIX 命令行上的 3 个最重要的“kill”信号:
内核会放开进程而不通知进程。像这样不干净的杀戮可能会导致数据丢失。这是可用的“最难”、“最粗暴”和最不安全的终止信号,并且只能用于阻止似乎不可阻挡的事物。