微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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”软件包的一部分.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐