`sudo pkill -HUP -f "nginx:master process"`がコード129を返し、出力がないのはなぜですか?

`sudo pkill -HUP -f

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"

おすすめ記事