大家。 我写了一个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进程时如何自动杀死它?
答案 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