我對將信號轉發到具有陷阱的子進程感到困惑。說我有兩個腳本:bash trap''vs陷阱函數傳遞信號
a.sh
#!/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
。爲什麼我的陷阱在一種情況下傳遞信號而不是另一種?