Linux 进程被终止后会自动以新的 PID 重新启动

Linux 进程被终止后会自动以新的 PID 重新启动

我想停止 Linux 上的 Node 服务器,但当我尝试停止它时,它会自动以新的 PID 重新启动。我该如何彻底停止它?在这里你可以看到我尝试停止 Nginx 和 Node 进程。

节点服务器

我尝试过这些命令:

kill pid
Kill -9 pid
killall node <<command not working
killall -s KILL node <<< not working

当我尝试终止进程 3814 时,它显示错误“没有这样的进程”,我该如何停止节点服务器???

答案1

您误解了 的输出ps。您的第一个命令sudo systemctl stop nginx是停止正在运行的服务的正确方法,并且确实有效。您在 中看到的行ps不是正在运行的nginx进程,而是grep您启动的进程:

$ ps aux | grep foo
terdon    642773  0.0  0.0   8944  2384 pts/23   S+   13:40   0:00 grep --color foo

当您运行 时ps | grep,这是一个进程,因此 也包含在 的输出中ps。而且,由于grep包含字符串nginxgrep本身也包含在 的输出中grep。解决此问题的常用方法是:

  1. 使用pgrep而不是grep

     pgrep nginx
    

    如果有正在运行的进程,它将仅返回任何内容(PID 列表)nginx

  2. 使用字符类,grep这样您仍然可以匹配进程,但会忽略 grep 本身:

     ps aux | grep '[n]ginx'
    

由于grep流程现在包含[n]ginx而不是nginx,因此它本身将不会被匹配。

由于这些服务被设置为服务,并且可能设置为自动启动,因此终止它们只会重新启动它们。要停止它们,您应该始终使用systemctl stop nginx或(如果您的系统支持)service nginx stop

相关内容