2010-05-04 72 views
3

我一直在修正yukondude的正则表达式,但收效甚微。我试图杀死超过10分钟的进程。我已经知道进程ID是什么。我每10分钟循环一次数组,以查看是否有任何徘徊的特效在附近并需要被杀死。任何人对此有任何快速的想法?在Linux bash脚本中杀死一个10分钟的僵尸进程

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

回声...回声... ** ... ** ... – 2010-05-04 02:19:07

回答

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或类似的?无论如何,这应该是继续下去的。

+0

对不起,我用'僵尸'作为我一直在寻找谷歌搜索时。它实际上是一个守护进程的一部分,它启动了有时不能正确退出的PHP脚本。 – Steve 2010-05-04 01:42:09

+0

啊,大多数人都能工作。我在OSX上......除了“date -d”之外,还有什么办法可以进行日期比较吗? Mac不允许使用-d。 – Steve 2010-05-04 05:15:35

+0

那么,问题是'ps'并不能真正以特别好的格式给出流逝的时间或流程开始时间。当然可以解析它,但这是一种痛苦 - 最简单的方法可能是为您的OS X机器创建GNU'date',并在脚本中明确使用它,而不是系统的'日期'。 – caf 2010-05-04 06:53:23