[kill -s SIGUSR1]이 스크립트 내에서는 작동하지 않지만 명령줄에서는 작동하는 이유는 무엇입니까? (Re: 잘못된 신호 사양)

[kill -s SIGUSR1]이 스크립트 내에서는 작동하지 않지만 명령줄에서는 작동하는 이유는 무엇입니까? (Re: 잘못된 신호 사양)

SIGUSR1을 프로세스에 보내기 위한 명령줄 옵션이 포함된 쉘 스크립트(/bin/sh)를 작성하려고 합니다.

my_command() {
        printf "Sending SIGUSR1: "
        kill -s SIGUSR1 `pidof my_process`
        [ $? = 0 ] && echo "OK" || echo "FAIL"
}

그러나 실패합니다.

/etc/init.d# ./S40test my_command
Sending SIGUSR1: ./S40test: line 39: kill: SIGUSR1: invalid signal specification
FAIL

그러나 명령줄에서 명령을 실행하면 다음과 같습니다.

kill -s SIGUSR1 `pidof my_process`

...그러면 잘 작동합니다.

또한 실제 프로세스 번호를 사용하도록 pidof my_process를 변경했지만 여전히 작동하지 않습니다.

답변1

사용 kill -s USR1 <pid>하거나 kill -USR1 <pid>대체하십시오.

POSIX에 따르면사양, 전자가 표준 형식입니다.

-s signal_name
헤더에 정의된 기호 이름 중 하나를 사용하여 보낼 신호를 지정합니다 <signal.h>. signal_name의 값은 대소문자 독립적인 방식으로 인식되어야 합니다.SIG접두사 없음.
...
-signal_name
[XSI] 와 동일합니다 -s signal_name.

그러나 후자는 거의 보편적으로 지원됩니다(예를 들어 non-posix 쉘에서도 csh).

일부 쉘만 내장 기능 이외의 비표준 형식을 지원합니다. 특히 ( kill -s SIGFOODebian 및 Ubuntu에서 스크립트 실행의 경우 ) 지원되지 않습니다.kill -s FOOkilldash/bin/sh

관련 정보