스크립트 에서 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
가 코드로 반환되어 루프를 종료합니다.