0
我有2個shell腳本:爲什麼subshell無法從父shell中捕獲信號?
# subshell.sh
trap "echo Caught SIGTERM" 15
echo $$
sleep 100000
# parent.sh
setsid sh subshell.sh &
pid=$!
echo "sid=$pid"
sleep 2
# This won't work!
kill -15 -$pid
主要目的是發送SIGTERM到子shell及其所有子。谷歌搜索了一段時間(有一個棘手的問題是如何處理信號),我選擇setsid
創建一個新的會話併發送使用的信號-pid
。但是,雖然pid
正確,但不會打印此消息。如果我手動執行kill -15 -$pid
,這可以工作。那麼我怎樣才能發送一個信號給子shell呢?
提示:'睡眠'是一個阻塞操作。 – devnull
你的意思是subshell在睡眠時被阻塞,所以它不能捕獲信號?但是,當我在這些腳本之外手動執行kill命令時,它確實有效 –