bash:陷阱反应 - 不同的时间

bash:陷阱反应 - 不同的时间

GNU bash,版本 4.2.46(2)-release (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)-release (x86_64-pc-linux-gnu):3 秒后与“Termied”和“TRAP”相同的第一个结果

@zevzek“shell 脚本中没有作业”??!

curious ~$ cat ./ttj 
#!/bin/bash 
./trap-term & sleep 3; jobs; kill -TERM %1 
curious ~$ ./ttj 
[1]+  Running                 ./trap-term & 
curious ~$ TRAP

答案1

好吧,我自己找到了答案。

第二种情况:非交互式 shell - 作业控制被禁用 - 需要set -m

[curious ~]# cat ./tta
#!/bin/bash
set -m; ./trap-term & sleep 3; kill -TERM %1
[curious ~]# ./tta 
<... pause - 3s>
Terminated
TRAP
[curious ~]#

相关内容