Process

為什麼sudo pkill -HUP -f 'nginx: master process'返回程式碼129並且沒有輸出

  • September 15, 2012

我正在嘗試使用pkilland觸發 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(未使用雲映像安裝)執行良好。

通常,當shell返回128以上的狀態碼時,就意味著程序被信號殺死了。減去 128 得到信號編號。您的 kill 命令被信號 1(即 HUP)殺死。

pkill小心不要自殺。但它與它的父sudo程序相匹配。

有幾種方法可以避免這種情況:

  • 用於pkill -x僅考慮完全匹配而不考慮子字元串(如果可能,建議使用,這是避免虛假匹配的最佳方法)。
  • 不要使用該-f選項。
  • (不得已)編寫一個與自身不匹配的模式,例如"[n]ginx: master process".

引用自:https://unix.stackexchange.com/questions/45716