pkill
.NETを使用してNginx基本プロセスを再ロードしようとしていますsudo
。
sudo pkill -HUP -f "nginx: master process"
サーバーは正常に再ロードされますが、コマンドがコード129を返す理由を知っている人がいるかどうか疑問に思います。
# Running as root
$ pkill -HUP -f "nginx: master process"
$ echo $?
# Output is as expected:
0
# Running as a user (sudo is set to not prompt for a password)
% sudo pkill -HUP -f "nginx: master process
% echo $?
# Output is weird (considering sudo should be passing along the return
# code of the command it is executing):
129
EC2で実行されているUbuntu 12.04.1 LTSで実行...驚くべきことに、実際のマシン(クラウドイメージを使用してインストールされていない)で実行されているUbuntu 12.04.1 LTSは正常に動作します。
答え1
通常、シェルが128より高いステータスコードを返すと、プロセスがシグナルによって終了したことを意味します。 128を引いて信号番号を取得します。 Killコマンドはシグナル1(HUPなど)によって終了しました。
pkill
自殺しないように注意してください。ただし、これは親(プロセス)sudo
と一致します。
これを防ぐ方法はいくつかあります。
pkill -x
部分文字列ではなく、正確な一致のみを考慮するために使用されます(可能であれば推奨され、これは間違った一致を防ぐための最良の方法です)。- このオプションを使用しないでください
-f
。 - (最後の手段)自分と一致しないパターンを作成します(例:)
"[n]ginx: master process"
。
答え2
sudo
pkill
HUP信号がに送信中であるため、129を返しますsudo
。これは、コマンドラインがsudo
ユーザーが提供した文字列と一致するためです。信号によって終了したプロセスは、コード128 +信号番号で終了します。 HUPは信号番号1なので、終了コードは129です。pkill
-f