3

我一直在修改yukondude的正则表达式答案,但收效甚微。我试图杀死超过 10 分钟的进程。我已经知道进程 ID 是什么。我每 10 分钟循环一次数组,看看是否有任何挥之不去的 procs 存在并且需要被杀死。有人对此有任何快速的想法吗?

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

1 回答 1

6

就像真正的僵尸一样,僵尸进程不能被杀死——它们已经死了。

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

这将杀死所有运行时间超过 10 分钟(600 秒)的 UID 1000 拥有的进程。您可能只想将其过滤到您感兴趣的 PID - 可能是通过父进程 ID 或类似的?无论如何,这应该是继续下去的事情。

于 2010-05-04T01:30:43.703 回答