신호를 기다리다

신호를 기다리다

스크립트 에서 bash다음과 같이 신호를 기다리는 쉬운 방법이 있습니까?

wait -s SIGINT

무슨 상관이야? 아마 그냥 trap?

답변1

아니요.

wait특히 상위 프로세스가 하위 프로세스의 종료를 기다리고 해당 종료 상태에 액세스하는 데 사용됩니다.

게다가 어떤 프로세스도 신호를 포착할 수 없습니다 KILL(예로 사용된 원래 질문 KILL).

또한 "신호를 기다리는 것"은 신호가 비동기 이벤트이기 때문에 특이한 것입니다.기다리다대신 신호 처리기( trap셸에서 사용됨)를 설치하여 신호를 처리합니다.언제든지도착했습니다. 신호는 스크립트 실행 중 언제든지 도착할 수 있으며, 이것이 발생하면 신호 처리기가 실행됩니다(신호가 처리되는 동안 정상적인 프로그램 흐름이 일시적으로 중단됩니다).

분명히, 당신은 다음과 같은 일을 할 수 있습니다

trap 'quit=1' USR1

quit=0
while [ "$quit" -ne 1 ]; do
    printf 'Do "kill -USR1 %d" to exit this loop after the sleep\n' "$$"
    sleep 1
done

echo The USR1 signal has now been caught and handled

일종의 "신호 도착 대기" 루프를 수행합니다.

여기서 "트랩"은 신호를 "잡으며" USR1"핸들러"가 설정되고 quit제어 1가 코드로 반환되어 루프를 종료합니다.

관련 정보