GNU bash, 버전 4.2.46(2)-릴리스(x86_64-redhat-linux-gnu)
[curious ~]# cat ./trap-term
#!/bin/bash
trap 'echo TRAP' TERM
sleep 30
[curious ~]# ./trap-term & sleep 3; kill -TERM %1
[1] 3141
<... pause - 3s>
[curious ~]# Terminated
TRAP
[1]+ Exit 143 ./trap-term
즉각적인 응답(3초)? !
[curious ~]# cat ./tt
#!/bin/bash
./trap-term & sleep 3; kill -TERM %1
[curious ~]# ./tt <... pause - 3s>
[curious ~]# <... pause - 30s> TRAP
응답은 bash 문서와 일치합니다.
Bash가 명령이 완료되기를 기다리고 트랩이 설정되었다는 신호를 받으면 명령이 완료될 때까지 트랩이 실행되지 않습니다.
문제는 왜 첫 번째 변형이 다른 변형보다 훨씬 빠른가입니다.
고쳐 쓰다:
다른 배포판에서 테스트되었습니다:
Ubuntu 20.04.3 LTS(GNU/Linux 4.4.0-19041-Microsoft x86_64), GNU bash, 버전 5.0.17(1)-릴리스(x86_64-pc-linux-gnu): "Termied" 및 " TRAP' 같은 첫 번째 결과
@zevzek "쉘 스크립트에 작업이 없습니다"? ? !
curious ~$ cat ./ttj
#!/bin/bash
./trap-term & sleep 3; jobs; kill -TERM %1
curious ~$ ./ttj
[1]+ Running ./trap-term &
curious ~$ TRAP
답변1
글쎄요, 저는 스스로 답을 찾았습니다.
두 번째 경우: 비대화형 쉘 - 작업 제어 비활성화 - 필수 set -m
.
[curious ~]# cat ./tta
#!/bin/bash
set -m; ./trap-term & sleep 3; kill -TERM %1
[curious ~]# ./tta
<... pause - 3s>
Terminated
TRAP
[curious ~]#