当主要进程被杀死时,bash子进程不会被杀死

时间:2014-12-26 06:33:53

标签: linux multithreading bash shell

大家。 我写了一个bash脚本来监视cpu,内存和网络信息。 cpu和内存部分一切都很好。但是当谈到网络部分时,事情变得有趣。 我使用" ifstat"监控网络。 " ifstat"是一个块线程,将在屏幕上连续打印网络IO。我的bash脚本如下所示:     #!/斌/庆典

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

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

我用     bash xx.sh 运行它并使用ctrl + c来杀死它。奇怪的是,虽然这个bash进程已被杀死,但ifstat进程仍然在后台运行。我用     ps -e | grep ifstat 检查一下。我总是在那里手工杀死它。

在我看来,ifstat进程是xx.sh的子进程,所以我希望它在杀死xx.sh时被杀死。但显然它不是!!! 有人可以告诉我为什么? 以及当我杀死xx.sh进程时如何自动杀死它?

1 个答案:

答案 0 :(得分:1)

陷阱终止并传播kill。

#ignore other less important codes

ifstat > network.info &

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

while true
do
  ...
done