对于许多例子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
会错过的情况?
INT TERM EXIT
在收到SIGTERM
或的条件下,清理代码会执行两次SIGINT
。