我对将信号转发到带有陷阱的子进程感到困惑。假设我有两个脚本:
灰
#!/bin/bash
# print the process id
echo $$
cleanup() {
rv=$?
echo "cleaning up $rv"
exit
}
sleep 5
trap '' SIGTERM # trap cleanup SIGTERM
echo 'cant stop wont stop'
./b.sh
echo 'can stop will stop'
trap - SIGTERM
sleep 4
echo 'done'
b.sh
#!/bin/bash
sleep 4;
echo 'b done'
如果我执行a.sh
然后从另一个窗口用 杀死进程组kill -- -PGID
,则 SIGTERM 将被忽略并且不会传递给b.sh
. 但如果我这样做trap cleanup SIGTERM
,SIGTERM 会通过并终止b.sh
。为什么我的陷阱在一种情况下传递信号而不是另一种情况?