答案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
包含字符串nginx
,grep
本身也包含在 的输出中grep
。解决此问题的常用方法是:
使用
pgrep
而不是grep
pgrep nginx
如果有正在运行的进程,它将仅返回任何内容(PID 列表)
nginx
。使用字符类,
grep
这样您仍然可以匹配进程,但会忽略 grep 本身:ps aux | grep '[n]ginx'
由于grep
流程现在包含[n]ginx
而不是nginx
,因此它本身将不会被匹配。
由于这些服务被设置为服务,并且可能设置为自动启动,因此终止它们只会重新启动它们。要停止它们,您应该始终使用systemctl stop nginx
或(如果您的系统支持)service nginx stop
。