我创建了一个bash脚本来杀死运行关闭脚本后仍存活的某些进程。
#!/bin/sh
echo "Alive processes on" `date` ":" > $LOG_DIR/roguePs.out
ps auxww | grep 'fr_home' | grep -v 'grep' | grep -v 'stopAll.sh' >> $LOG_DIR/roguePs.out
kill -9 $(ps axww | grep 'fr_home' | grep -v 'grep' | grep -v 'stopAll.sh' | cut -d " " -f 2)
sleep 10
echo "Alive processes on" `date` ":" >> $LOG_DIR/roguePs.out
ps auxww | grep 'fr_home' | grep -v 'grep' | grep -v 'stopAll.sh' >> $LOG_DIR/roguePs.out
简而言之,上面的脚本:
因此,该脚本使用的是“ kill -9”,有时可以成功杀死所有内容,但是在某些情况下,一个进程仍然有效。
输出文件显示如下内容:
Alive processes on Sat May 4 12:54:15 2019 :
...
<other processes>
...
oracle 6066 0.0 0.7705128413368 ? O May 01 8:03 /opt/app/oracle/product/middleware/fr_home/bin/rwserver server=RptSvr_tst1 batch=yes uid=1373394053
...
<other processes>
...
Alive processes on Sat May 4 12:54:25 2019 :
oracle 6066 0.0 0.7705264421520 ? S May 01 8:03 /opt/app/oracle/product/middleware/fr_home/bin/rwserver server=RptSvr_tst1 batch=yes uid=1373394053
在终止之前,进程处于“ O”状态(进程正在处理器中运行),在之后则处于“ S”(休眠)状态。从来没有处于“ Z”状态(僵尸),我认为这是“ kill -9”可能不起作用的可能原因。
此外,尽管在10秒钟后检查了进程,但我也已在数小时后手动对其进行了检查,并且该检查仍然有效。
不确定是什么原因导致无法正常执行杀死操作,还是要实施其他措施以确保一致杀死所有进程。
任何建议将不胜感激。
答案 0 :(得分:1)
好。我能够找到一个似乎对我来说很好用的命令。
因此,这里是评估的选项:
kill -9 $(ps axww | grep 'fr_home' | grep -v 'grep' | grep -v 'stopAll.sh' | cut -d " " -f 2)
成为:
kill -9 $(ps axww | grep 'fr_home' | grep -v 'grep' | grep -v 'stopAll.sh' | gawk '{print $1}')