2014-12-26 205 views
0

所有人。 我寫了一個bash腳本來監視cpu,內存和網絡信息。一切都很好,CPU和內存部分。但是當涉及網絡部分時,事情變得有趣。 我使用「ifstat」來監視網絡。 「ifstat」是一個可以連續在屏幕上打印網絡IO的塊線程。我的bash腳本是象下面這樣:! #/斌/慶典當主進程被終止時,bash子進程不會被終止

#ignore other less important codes 
...... 

ifstat > network.info & 
while true 
do 
    ... 
done 

我用 慶典xx.sh 運行它,並使用Ctrl + C將其殺死。奇怪的是,雖然這個bash進程已經被殺死,但是ifstat進程仍然在後臺運行。我使用 ps -e | grep ifstat 檢查出來。它總是在那裏我手動殺死它。

在我看來,ifstat進程是xx.sh的子進程,所以我期望它在殺死xx.sh時被殺死。但顯然它不是! 有人可以告訴我爲什麼? 當我殺死xx.sh過程時如何自動殺死它?

回答

1

陷阱終止和傳播殺。

#ignore other less important codes 

ifstat > network.info & 

IFSTAT_PID=$! 
trap "kill $IFSTAT_PID $$" TERM INT HUP 0 

while true 
do 
    ... 
done 
+0

該解決方案非常棒!謝謝!但還有一個問題是,爲什麼我殺了shell進程,它不會自動殺死ifst進程,因爲ifst進程是shell進程的子進程(我認爲)。 – Yoyoslx

+0

是的,這就是爲什麼。 – Jasen