Não em um lugar onde eu possa testar isso, mas isso deve funcionar. read
é uma parte padrão do script de shell, ele coloca algo de stdin (que pode ser um fluxo ou um dispositivo como / dev / tty) em uma variável. Então você acabou de fazer um loop while
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
Ou, mais simplesmente, se o seu UNIX tiver pgrep:
pgrep java | while read PID
do
ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done
Às vezes, você pode usar xargs
em casos como esses. Lembre-se que por padrão, xargs coloca um grupo de argumentos no final do comando. Então você precisa alimentá-lo um de cada vez (com -n1) e colocar o PID onde quiser, com -i:
pgrep java | xargs -n1 -i{} ps -p {} -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
(mais uma vez, desculpas se a sintaxe -i estiver errada, não posso testar agora. Verifique a página de manual se isso explodir)