如何找到nginx进程的PID

如何找到nginx进程的PID

我正在尝试修复 nginx 的问题,并认为我的机器上正在运行一个 nginx 进程。当我运行这个命令时,我得到这个输出。

$ ps aux -P | grep nginx
1000      3947  0.0  0.0  13596   932 pts/0    S+   14:05   0:00 grep --color=auto nginx

但如果我尝试终止进程 1000、3947、13596 或 932,我会收到如下错误:

bash: kill: (1000) - No such process

发生了什么事?如何找到并终止 nginx 进程?

答案1

我通常觉得pgrep比 更方便ps | grep。您可能还想看看killall最终目标是否是按名称删除一堆进程。

答案2

ps aux -P显示这些列:

$ ps aux -P | head -1
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

只有第二列是 pid。

警告:不要尝试杀死随机的 pid。

pid 3947 是当您收到提示时结束的 grep 进程,因此确实不存在这样的进程。

如果有 nginx 进程,您会在 grep 输出中看到它。结论:nginx 没有在您的机器上运行。

答案3

避免grep命令本身出现在ps输出中的一个常见技巧是将第一个字符放入字符类中,这样它就不会与其文字本身相匹配。 IE,

$ ps aux | grep [n]ginx

这样,grep模式将匹配“nginx”,但不匹配输出中显示的文字“[n]ginx” ps

答案4

很多时候您必须使用它sudo来管理nginx流程。sudo如果出现“不允许操作”错误,请在下面的所有命令前面加上前缀。虽然这个问题被标记为“ps”,但我想提一下其他机会。

如果你只是想停止 nginx,我建议使用:

service nginx stop

但如果您的目的是查找“pid”本身(例如发送信号),我建议您寻找nginx.pid.一旦 nginx 启动,它将把它的 pid 放入这个文件中。

nginx可以用信号来控制。 master进程的进程ID默认写入文件/usr/local/nginx/logs/nginx.pid

不过,它可能在其他地方。

如果你有自己编译的nginxpid-path您也可以指定。

--pid-path=pathnginx.pid— 设置将存储主进程的进程 ID 的文件的名称。安装后,始终可以使用 pid 指令在 nginx.conf 配置文件中更改文件名。默认情况下,该文件名为 prefix/logs/nginx.pid

否则,您可以在 中显式指定 pid 文件的路径nginx.conf

阅读Nginx 控制

因此,要发送信号只需键入:

kill `cat /path/to/nginx.pid`

或者

kill $(cat /path/to/nginx.pid)

阅读通过pid文件杀死进程

就个人而言,编写脚本或部署指令时,我不会委托停止或搜索 nginx pid,pgrep尤其是在 上grep,尽管它们适用于本地计算机。但在这种情况下,我会将停止缩短为pkill(进程终止):

pkill nginx

相关内容