所有人。
我已经编写了一个bash脚本来监视cpu、内存和网络信息。cpu和内存部件一切正常。但说到网络部分,事情就变得有趣了。
我用“ifstat”来监视网络ifstat”是一个块线程,它将在屏幕上连续打印网络IO。我的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进程时自动杀死它?

最佳答案

陷阱终止并推进杀戮。

#ignore other less important codes

ifstat > network.info &

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

while true
do
  ...
done

关于linux - 当主进程被杀死时,bash子进程不会被杀死,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27653650/

10-11 15:39