【问题标题】:bash sub process won't be killed when main process been killed当主进程被杀死时,bash子进程不会被杀死
【发布时间】:2014-12-26 06:33:53
【问题描述】:

每个人。 我写了一个bash脚本来监控cpu、内存和网络信息。 cpu和内存部分一切都很好。但说到网络部分,事情就变得有趣了。 我使用“ifstat”来监控网络。 “ifstat”是一个块线程,会在屏幕上连续打印网络IO。我的 bash 脚本如下所示: #!/bin/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 进程时自动杀死它?

【问题讨论】:

    标签: linux multithreading bash shell


    【解决方案1】:

    陷阱终止并传播杀戮。

    #ignore other less important codes
    
    ifstat > network.info &
    
    IFSTAT_PID=$!
    trap "kill $IFSTAT_PID $$" TERM INT HUP 0
    
    while true
    do
      ...
    done
    

    【讨论】:

    • 这个解决方案很棒!谢谢!但是还有一个问题是为什么我杀死了shell进程它不会自动杀死ifstat进程,因为ifstat进程是shell进程的子进程(我认为)。
    猜你喜欢
    • 2010-12-02
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2013-09-19
    • 2016-01-24
    • 2013-08-19
    • 2013-08-19
    相关资源
    最近更新 更多