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