Linux脚本有选择地终止进程教程
我正在寻找一种自动执行以下操作的方法:
运行ps -ef列出所有进程.
在CMD列中过滤出包含Java的行.
过滤掉那些在UID列中包含root的行.
对于每个过滤的行,获取PID列并运行pargs< PID>.
如果pargs< PID>的输出包含特定的字符串XYZ,则发出kill -9< PID>.命令.
要根据特定的列值过滤出行,是否有比grep更好的方法?我可以用
ps -ef | awk '{print $1}' | grep <UID>
但随后我从所有其他列中丢失了信息.我现在拥有的最接近的东西是:
ps -ef | grep java | grep root | grep -v grep | xargs pargs | ?????
编辑
通过使用以下脚本,我能够解决此问题:
ps -ef | awk '/[j]ava/ && /root/ {print $2}' | while read PID; do
pargs "$PID" | grep "Args" > /dev/null && kill -9 $PID && echo "$PID : Java process killed!"
done
anubhava和kojiro的答案都帮助我到达了那里.但是,由于我只能接受一个答案,因此我将kojiro的答案标记为正确的答案,因为它帮助了我更多.
解决方法:
考虑pgrep:
pgrep -U 0 java | while read pid; do
pargs "$pid" | grep -qF XYZ && kill "$pid"
done
pgrep和pkill在许多Linux系统上可用,并且是* BSD和OS X的“ proctools”软件包的一部分.