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 | grepkillall最終目標が名前で複数のプロセスを削除することを確認したい場合があります。

答え2

ps aux -P次の列を表示します。

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

2番目の列だけがpidです。

警告:任意のpidを殺そうとしないでください。

pid 3947はプロンプトが表示されたときに終了したgrepプロセスなので、実際にはそのようなプロセスはありません。

nginxプロセスがある場合は、grep出力に表示されます。結論:nginxはあなたのコンピュータで実行されていません。

答え3

grepコマンド自体がps出力に表示されないようにする一般的な方法は、最初の文字を文字クラスに入れてリテラル自体と一致しないようにすることです。つまり、

$ ps aux | grep [n]ginx

これにより、grepパターンは「nginx」と一致しますが、出力に表示されるリテラル「[n]ginx」とは一致しませんps

答え4

sudoプロセスを管理するためにこれを使用する必要があることがよくありますnginxsudo「操作が許可されていません」エラーが発生した場合は、以下のすべてのコマンドの前にプレフィックスを入力してください。この質問には「ps」というタグが付けられていますが、他の機会についても言及したいと思います。

nginxを停止するには、以下を使用することをお勧めします。

service nginx stop

しかし、あなたの目的が「pid」自体を見つけることである場合(例えば、シグナルを送る)、nginxが起動するnginx.pidと、そのpidはこのファイルに保存されます。

nginx信号を使って制御できます。マスタープロセスのプロセスIDは、デフォルトで/usr/local/nginx/logs/nginx.pidファイルに書き込まれます。

しかし、他の場所にいるかもしれません。

お持ちの場合nginxを直接コンパイルするpid-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特にWindowsでは、grepローカルコンピュータで動作していても同じです。ただし、この場合は停止をpkill(プロセス終了)に減らしてください。

pkill nginx

関連情報