大家好
我试图编写一个bash脚本来显示Java的所有进程,但是我希望它以下面的方式显示。
ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
上面的问题是它仅显示一个特定的PID。
所以我想ps aux|grep j\[a\]va
获取每个的PID,然后在上面的命令中运行每个PID。
结果:
root@reinhardt-VirtualBox:/home/reinhardt# ps -p 1959 -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
PID MEMORY USER GROUP COMMAND ARGS
1959 13648 root root grep grep --color=auto java
我想某种循环会像for循环吗?
不在可以测试这一点的地方,但这应该可以工作。read
是Shell脚本的标准部分,它将来自stdin(可以是流,也可以是设备,例如/ dev / tty)的内容放入变量中。那你就做一会儿循环
ps auwwx | gawk '/[j]ava/{print $1}' | while read PID
do
ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done
或更简单地说,如果您的UNIX具有pgrep:
pgrep java | while read PID
do
ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done
有时您可以xargs
在这种情况下使用。请记住,默认情况下,xargs将一组参数放在命令末尾。因此,您需要一次喂一次(使用-n1),然后使用-i将PID放置在所需的位置:
pgrep java | xargs -n1 -i{} ps -p {} -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
(再次,如果我弄错了-i语法,我深表歉意,我现在无法测试。检查联机帮助页是否炸毁)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句