2013-12-20 52 views
0

我有一個運行程序的C shell腳本。該計劃會產生一個孩子。當我通過ctrl-C發送一個SIGINT到我的shell腳本時,shell腳本退出以及它產生的進程我想。然而,最後的過程依然存在。我如何指示C shell在它退出之前終止所有子進程?如何從shell腳本中退出時終止所有子進程?

+2

你爲什麼要在C shell中編寫腳本?這是腳本編寫的最糟糕的外殼。 http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ – Barmar

+0

是的,我知道這是一個可怕的「語言」 – dromodel

+0

我(仁慈)沒有安裝C shell多年特別是tcsh),但也許嘗試掛斷('stty hupcl')然後'kill -6 $$'? – bishop

回答

1

如何爲SIGINT創建信號陷阱? See the Interrupt Handling section here

#!/bin/csh 

# Setup sigint handler 
onintr close 

# start a background process 
sleep 1000& 
setenv pid $! 

while (1 == 1) 
    echo Program is running 
    sleep 2 
end 

close: 
echo End of program. Kill $pid 
kill $pid