对于许多例子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
会错过的情况?
该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] 删除。
我来说两句