sigspec은 0 EXIT 또는 SIGEXIT 또는 종료입니까?

sigspec은 0 EXIT 또는 SIGEXIT 또는 종료입니까?

프로세스가 종료되는 시기(무엇보다도)를 추적하고 임시 파일을 삭제하는 트랩을 작성해야 합니다. 나는 더 나은 코드 가독성을 위해 숫자 대신 sigspec을 사용하는 것을 선호합니다. 관련 스니펫은 다음과 같습니다.

trap 'rm "$temp"' 0 SIGHUP SIGTERM

sigspec은 , 또는 0이어야 합니까 ?exitEXITSIGEXIT

답변1

쉘 명령 언어, 트랩POSIX 사양 읽기

조건은 EXIT, 0(EXIT와 동일) 또는 다음과 같이 SIG 접두사 없이 기호 이름을 사용하여 지정된 신호일 수 있습니다.<시그널.h>XBD 헤더에 정의된 헤더(예: HUP, INT, QUIT, TERM) 구현 시 SIG 접두사가 붙은 이름을 허용하거나 신호 이름의 대문자 사용을 확장명으로 무시할 수 있습니다. SIGKILL 또는 SIGSTOP에 대한 트랩을 설정하면 정의되지 않은 결과가 발생합니다.

불다허용 신호에는 SIG라는 접두사가 붙습니다.

신호 이름은 대소문자를 구분하지 않으며 SIG 접두사는 선택 사항입니다. sigspec이 EXIT(0)이면 쉘을 종료할 때 arg 명령이 실행됩니다.

하지만 EXIT 신호가 없기 때문에( man 7 signal또는<시그널.h>) Bash에서도 SIGEXIT를 사용할 수 없습니다.

답변2

가서 한번 시도해 보세요. Bash는 다음과 같이 알려줄 것입니다.

paul $ trap 'echo Foop' EXIT
paul $ trap 'echo Foop' SIGEXIT
bash: trap: SIGEXIT: invalid signal specification
paul $ 

"실제" 신호 이름에는 SIG... 부분이 있을 수도 있고 없을 수도 있습니다. 그러나 신호 0은 실제로 존재하지 않으며 이름도 없습니다. kill -0PID가 존재하는지 확인하되 신호를 보내지 마십시오. Bash는 트랩 작업을 수행하지만 실제 신호는 없습니다. 단지 스크립트 처리가 중지되었다는 것만 알고 있을 뿐입니다.

관련 정보