“陷阱... INT TERM EXIT”真的有必要吗?

混血的

对于许多例子trap使用trap ... INT TERM EXIT的清理任务。但是是否真的有必要列出所有三个sigspec?

手册说

如果SIGNAL_SPEC为EXIT(0),则从外壳退出时执行ARG。

我认为无论脚本正常完成还是由于收到SIGINT脚本而完成,脚本都适用SIGTERM实验还证实了我的信念:

$ cat ./trap-exit
#!/bin/bash
trap 'echo TRAP' EXIT
sleep 3
$ ./trap-exit & sleep 1; kill -INT %1
[1] 759
TRAP
[1]+  Interrupt               ./trap-exit
$ ./trap-exit & sleep 1; kill -TERM %1
[1] 773
TRAP
[1]+  Terminated              ./trap-exit

那为什么这么多例子列出了全部INT TERM EXIT呢?还是我错过了某件事,是否有鞋底EXIT会错过的情况?

肖恩·高夫(Shawn J.Goff)

POSIX规范并没有太多说的,导致执行EXIT陷阱,只有它的环境必须考虑什么是执行时它像的条件。

在Busybox的白蜡外壳中,由于SIGINT或SIGTERM,退出前的陷阱退出测试不会回显“ TRAP”。我怀疑存在其他可能无法正常运行的外壳。

# /tmp/test.sh & sleep 1; kill -INT %1
# 
[1]+  Interrupt                  /tmp/test.sh
# 
# 
# /tmp/test.sh & sleep 1; kill -TERM %1
# 
[1]+  Terminated                 /tmp/test.sh
# 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章