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