我一直在修正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 {}
我一直在修正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 {}
就像真正的僵尸,僵尸进程不能被杀死 - 它们已经死了。
当他们的父进程调用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或类似的?无论如何,这应该是继续下去的。
对不起,我用'僵尸'作为我一直在寻找谷歌搜索时。它实际上是一个守护进程的一部分,它启动了有时不能正确退出的PHP脚本。 – Steve 2010-05-04 01:42:09
啊,大多数人都能工作。我在OSX上......除了“date -d”之外,还有什么办法可以进行日期比较吗? Mac不允许使用-d。 – Steve 2010-05-04 05:15:35
那么,问题是'ps'并不能真正以特别好的格式给出流逝的时间或流程开始时间。当然可以解析它,但这是一种痛苦 - 最简单的方法可能是为您的OS X机器创建GNU'date',并在脚本中明确使用它,而不是系统的'日期'。 – caf 2010-05-04 06:53:23
回声...回声... ** ... ** ... – 2010-05-04 02:19:07