私は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
2番目の列だけがpidです。
警告:任意のpidを殺そうとしないでください。
pid 3947はプロンプトが表示されたときに終了したgrepプロセスなので、実際にはそのようなプロセスはありません。
nginxプロセスがある場合は、grep出力に表示されます。結論:nginxはあなたのコンピュータで実行されていません。
答え3
grep
コマンド自体がps
出力に表示されないようにする一般的な方法は、最初の文字を文字クラスに入れてリテラル自体と一致しないようにすることです。つまり、
$ ps aux | grep [n]ginx
これにより、grep
パターンは「nginx」と一致しますが、出力に表示されるリテラル「[n]ginx」とは一致しませんps
。
答え4
sudo
プロセスを管理するためにこれを使用する必要があることがよくありますnginx
。sudo
「操作が許可されていません」エラーが発生した場合は、以下のすべてのコマンドの前にプレフィックスを入力してください。この質問には「ps」というタグが付けられていますが、他の機会についても言及したいと思います。
nginxを停止するには、以下を使用することをお勧めします。
service nginx stop
しかし、あなたの目的が「pid」自体を見つけることである場合(例えば、シグナルを送る)、nginxが起動するnginx.pid
と、そのpidはこのファイルに保存されます。
nginx
信号を使って制御できます。マスタープロセスのプロセスIDは、デフォルトで/usr/local/nginx/logs/nginx.pidファイルに書き込まれます。
しかし、他の場所にいるかもしれません。
お持ちの場合nginxを直接コンパイルするpid-path
指定することもできます。
--pid-path=path
nginx.pid
- マスタープロセスのプロセスIDを保存するファイル名を設定します。インストール後、いつでもpidディレクティブを使用してnginx.conf設定ファイルのファイル名を変更できます。デフォルトでは、ファイル名はprefix/logs/nginx.pidです。
そうでない場合は、pidファイルパスを明示的に指定できますnginx.conf
。
したがって、信号を送信するには、次のように入力します。
kill `cat /path/to/nginx.pid`
または
kill $(cat /path/to/nginx.pid)
個人的にスクリプトや配布ガイドラインを作成するときは、nginx pidの停止や検索を委任しません。pgrep
特にWindowsでは、grep
ローカルコンピュータで動作していても同じです。ただし、この場合は停止をpkill
(プロセス終了)に減らしてください。
pkill nginx