2014-12-26 171 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