linux 下写 shell kill掉运行时间超过5分钟的PHP进程
在linux下,如果我有一个php脚本经常卡住,占用100%的CPU,有没办法可以写个SHELL定时检查一下PHP进程有哪个运行时间超过5分钟的,就KILL掉?...
在linux 下,如果我有一个php脚本经常卡住,占用100%的CPU,有没办法可以写个SHELL定时检查一下PHP进程有哪个运行时间超过5分钟的,就KILL掉?
展开
展开全部
可以的,能根据Cpu累积耗时杀掉程序。
相关进程名字要知道哈。
假设以php进程为名字。
p_name=php
while true
do
sleep 3
#每3秒检查一次。
pro="$(ps -A|grep "$p_name"|head -n1)"
time="$(echo $pro|awk '{
split($3,tab,/:/); if (tab[2]+tab[1]*60>=5) {print 1}else{print 0}
}')"
#上面那句利用awk判断时间是不是大于5分钟。是则输出1,否则输出0.
pid="$(echo $pro|awk '{print $1}')"
#如果为1 就杀掉那个进程。
if [ $time = '1' ]
kill -9 $pid
fi
done
相关进程名字要知道哈。
假设以php进程为名字。
p_name=php
while true
do
sleep 3
#每3秒检查一次。
pro="$(ps -A|grep "$p_name"|head -n1)"
time="$(echo $pro|awk '{
split($3,tab,/:/); if (tab[2]+tab[1]*60>=5) {print 1}else{print 0}
}')"
#上面那句利用awk判断时间是不是大于5分钟。是则输出1,否则输出0.
pid="$(echo $pro|awk '{print $1}')"
#如果为1 就杀掉那个进程。
if [ $time = '1' ]
kill -9 $pid
fi
done
追问
你好,
如果我的$p_name = 2.php
ps -A|grep 2.php |head -n1 这句出不来我的2.php的进程ID啊,KILL不掉
而且SHELL有报错
syntax error near unexpected token `fi'
追答
#!/bin/bash
p_name=vim
while true
do
sleep 3
#每3秒检查一次。
pro="$(ps -A|grep "\\"|sort -k3,3|head -n1)"
time="$(echo $pro|awk '{
split($3,tab,/:/); if (tab[2]+tab[1]*60>=5) {print 1}else{print 0}
}')"
#上面那句利用awk判断时间是不是大于5分钟。是则输出1,否则输出0.
pid="$(echo $pro|awk '{print $1}')"
echo $pid $pro
#如果为1 就杀掉那个进程。
if [ $time = '1' ];then
kill -9 $pid
fi
done
我疏忽了,if 少了一个then,还有进程要根据时间排序。否则会堵塞程序。
变量pro本来就不是进程名字哈。我们不需要进程名字。只需要进程号。
pid="$(echo $pro|awk '{print $1}')"
它根据pro变量得到进程ID。
也不是杀不掉,只是你要注意满足条件的进程不多
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询