![트랩의 출력 신호로 인해 트랩이 호출됩니까?](https://linux55.com/image/115507/%ED%8A%B8%EB%9E%A9%EC%9D%98%20%EC%B6%9C%EB%A0%A5%20%EC%8B%A0%ED%98%B8%EB%A1%9C%20%EC%9D%B8%ED%95%B4%20%ED%8A%B8%EB%9E%A9%EC%9D%B4%20%ED%98%B8%EC%B6%9C%EB%90%A9%EB%8B%88%EA%B9%8C%3F.png)
어떤 신호를 포착하여 스크립트를 종료하는 다음 트랩이 있다고 가정해 보겠습니다.
#!/bin/sh
trapterm() {
echo "Process (PID: $$) interrupted." >&2
exit 2
}
# add trap to catch terminating signals
trap trapterm INT TERM
# […]
이제 트랩을 호출하고 출력하는 신호를 어떻게 얻을 수 있습니까? 결과는 다음과 같이 가상이어야 합니다 $SIGNAL
.
#!/bin/sh
trapterm() {
echo "Process (PID: $$) interrupted by signal $SIGNAL." >&2
exit 2
}
# add trap to catch terminating signals
trap trapterm INT TERM
# […]
쉘 특정 솔루션(bash)은 괜찮지만 POSIX 호환 솔루션을 선호합니다.
답변1
연산 man 1p trap
( 의 첫 번째 인수 trap
)은 수신된 신호에 대한 추가 정보 없이 단순히 평가하므로 이식 가능한 솔루션은 각 신호에 대해 서로 다른 핸들러를 설치하는 것일 수 있습니다.
#!/bin/sh
trap_sig() {
echo "Process (PID: $$) interrupted by signal $1." >&2
exit 2
}
# add trap to catch terminating signals
trap 'trap_sig INT' INT
trap 'trap_sig TERM' TERM
# […]