bash: 트랩 반응 - 다른 시간

bash: 트랩 반응 - 다른 시간

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 ~]#

관련 정보