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 SIGFOO
Debian 및 Ubuntu에서 스크립트 실행의 경우 ) 지원되지 않습니다.kill -s FOO
kill
dash
/bin/sh