Bash 매뉴얼에서
Bash가 명령이 완료되기를 기다리고 트랩이 설정되었다는 신호를 받으면 명령이 완료될 때까지 트랩이 실행되지 않습니다.
Bash가 wait 내장 함수를 통해 비동기 명령을 기다릴 때 트랩 세트가 있는 신호를 수신하면 wait 내장 함수가 128보다 큰 종료 상태로 즉시 반환된 다음 즉시 트랩을 실행하게 됩니다.
첫 번째 문장에 대해 몇 가지 실험을 해봤습니다.
lxterminal 탭에서 실행 중인 쉘에서:
$ trap "echo hello" HUP $ sleep 100
그런 다음 SIGHUP이 셸로 전송되도록 "x" 아이콘을 클릭하여 탭 창을 닫습니다.
쉘은
sleep 100
완료를 기다린 다음 트랩을 실행하는 대신 즉시 종료됩니다. 이유를 알고 싶습니다. 내가 놓친 게 무엇입니까?이것은 작동합니다
$ trap -p trap -- 'echo hello' SIGHUP $ echo $$ 19708 $ sleep 100
그런 다음 lxterminal의 다른 탭에서 실행하십시오.
$ kill -HUP 19708 $
첫 번째 탭의 sleep 명령이 완료되면:
$ sleep 100 hello
감사해요.
답변1
첫 번째 예에서 "x" 아이콘을 클릭하여 터미널 에뮬레이터 창을 닫으면 SIGHUP이 제어 터미널(예: 셸)로 전송됩니다.
터미널 에뮬레이터 창이 닫히지만 쉘은 종료되지 않고 완료될 sleep 100
때까지 계속 실행된 sleep 100
다음 쉘이 SIGHUP 트랩을 실행합니다. 의 출력에서는 이를 찾을 수 있지만 ps
닫힌 터미널 에뮬레이터 창에서는 찾을 수 없습니다.