Answers:
如@Mat在其答案中所示,SIGSPEC为0(在trap
命令上使用)将trap
在脚本退出时使命令运行。
这个例子说明了会发生什么。
$ cat tr.bash
#!/bin/bash
echo "PID: $$"
trap 'echo hi; exit 1' 0 1 2 15
while [ 1 ]; do
sleep 3
done
运行此命令时:
$ ./tr.bash
PID: 24086
它坐在这里无限期地等待着。在另一个窗口中,如果我们现在向其发送kill
信号,则kill -0
即使trap
命令中列出了信号0,您也会看到a 不会终止该进程。
$ kill -0 $(pgrep tr.bash)
$
但是,如果我们kill
使用信号1编写脚本,则kill -1
:
$ kill -1 $(pgrep tr.bash)
$
我们将看到该脚本退出,并打印消息“ hi” 2次。第一个用于信号1,第二个用于信号退出。
$ ./tr.bash
PID: 24086
hi
hi
0
shelltrap
命令中的含义。当发送带有的信号时kill
,信号号0表示根本不发送信号;这是测试目标过程是否存在的一种方法。