`sudo pkill -HUP -f "nginx: master process"`가 코드 129를 반환하고 출력이 없는 이유는 무엇입니까?

`sudo pkill -HUP -f "nginx: master process"`가 코드 129를 반환하고 출력이 없는 이유는 무엇입니까?

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

sudopkillHUP 신호가 로 전송 중이므로 129를 반환합니다 sudo. 이는 명령줄이 sudo사용자가 제공한 문자열과 일치하기 때문입니다. 신호에 의해 종료된 프로세스는 코드 128 + 신호 번호로 종료됩니다. HUP는 신호 번호 1이므로 종료 코드는 129입니다.pkill-f

관련 정보