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
まあ、私は自分で答えを見つけました。
2番目のケース:非対話型シェル - ジョブ制御を無効にする - 必須set -m
。
[curious ~]# cat ./tta
#!/bin/bash
set -m; ./trap-term & sleep 3; kill -TERM %1
[curious ~]# ./tta
<... pause - 3s>
Terminated
TRAP
[curious ~]#