Amit Shakya Asked: 2021-05-22 03:34:05 +0800 CST2021-05-22 03:34:05 +0800 CST 2021-05-22 03:34:05 +0800 CST Linux进程在杀死后自动以新的新PID重新启动 772 我想在 Linux 上停止 Node 服务器,但是当我尝试停止它时,它会自动以新的 PID 重新启动。我怎样才能完全阻止这种情况?在这里你可以看到我试图停止 Nginx 和 Node 进程。 我试过尝试这些命令: kill pid Kill -9 pid killall node <<command not working killall -s KILL node <<< not working 当我试图杀死进程 3814 时,它显示错误 No such process,我该如何停止节点服务器??? nginx 1 个回答 Voted Best Answer terdon 2021-05-22T04:44:12+08:002021-05-22T04:44:12+08:00 您误解了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包含字符串nginx,因此其grep本身包含在 的输出中grep。解决这个问题的常用方法是: 使用pgrep代替grep pgrep nginx nginx如果有正在运行的进程,那只会返回任何内容(PID 列表) 。 使用字符类,grep以便您仍然可以匹配该过程,但会忽略 grep 本身: ps aux | grep '[n]ginx' 因为该grep进程现在包含[n]ginx而不是nginx,所以它不会自己匹配。 由于这些设置为服务,并且可能设置为自动启动,因此杀死它们只会使它们重新启动。要阻止它们,您应该始终使用systemctl stop nginxor,如果您的系统支持它service nginx stop。
您误解了
ps
. 您的第一个命令sudo systemctl stop nginx
是停止正在运行的服务并且确实有效的正确方法。您在 中看到的行ps
不是正在运行nginx
的进程,而是grep
您启动的进程:当您运行时
ps | grep
,这是一个过程,因此也包含在ps
. 并且,由于您grep
包含字符串nginx
,因此其grep
本身包含在 的输出中grep
。解决这个问题的常用方法是:使用
pgrep
代替grep
nginx
如果有正在运行的进程,那只会返回任何内容(PID 列表) 。使用字符类,
grep
以便您仍然可以匹配该过程,但会忽略 grep 本身:因为该
grep
进程现在包含[n]ginx
而不是nginx
,所以它不会自己匹配。由于这些设置为服务,并且可能设置为自动启动,因此杀死它们只会使它们重新启动。要阻止它们,您应该始终使用
systemctl stop nginx
or,如果您的系统支持它service nginx stop
。