在Linux bash脚本中杀死10分钟的旧僵尸进程
收藏

我一直在修改yukondude的regex答案,但收效甚微。我试图终止超过10分钟的进程。我已经知道进程id是什么了。我每10分钟在一个数组中循环一次,看看是否有任何挥之不去的过程,需要被杀死。有人对此有什么好的想法吗?

ps -eo uid,pid,etime 3233332 | egrep ' ([0-9]+-)?([0-9]{2}:?){3}' | awk '{print $2}' | xargs -I{} kill {}


最佳答案:

就像真正的僵尸一样,僵尸进程不能被杀死——它们已经死了。
当它们的父进程调用wait()以获取它们的退出代码时,或者当它们的父进程退出时,它们会消失。
哦,你根本不是在说僵尸进程。这个bash脚本应该遵循您所追求的内容:

ps -eo uid,pid,lstart |
    tail -n+2 |
    while read PROC_UID PROC_PID PROC_LSTART; do
        SECONDS=$[$(date +%s) - $(date -d"$PROC_LSTART" +%s)]
        if [ $PROC_UID -eq 1000 -a $SECONDS -gt 600 ]; then
            echo $PROC_PID
        fi
     done |
     xargs kill

这将杀死uid 1000拥有的运行时间超过10分钟(600秒)的所有进程。您可能希望将其筛选为您感兴趣的PID—可能是通过父进程ID或类似的ID?不管怎样,这应该是一件值得继续的事情。

公众号