2014-01-23 40 views
0

我有2個shell腳本:爲什麼subshel​​l無法從父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呢?

+1

提示:'睡眠'是一個阻塞操作。 – devnull

+0

你的意思是subshel​​l在睡眠時被阻塞,所以它不能捕獲信號?但是,當我在這些腳本之外手動執行kill命令時,它確實有效 –

回答

0

那麼最後我設法通過創建另一個子shell來完成這項工作...,然後在該子shell中調用kill -15 -$pid。仍然不知道爲什麼父母的外殼不能做到這一點

+0

您是如何創建子shell的?我遇到了同樣的問題.. – Pithikos

相關問題