Exibir o PID com script bash

Exibir o PID com script bash

Bom dia a todos,

Estou tentando escrever um script bash para mostrar todos os processos de java, mas gostaria que fosse exibido da maneira abaixo.

 ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS

O problema acima é que ele mostra apenas um PID específico.

Então, quero ps aux|grep j\[a\]vaobter o PID de cada um e executar cada PID no comando acima.

RESULTADO:

 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

Eu acho que algum tipo de loop será feito como for loop?

Responder1

Não em um lugar onde eu possa testar isso, mas deve funcionar. readé uma parte padrão do script de shell, ele coloca algo do stdin (que pode ser um fluxo ou um dispositivo como /dev/tty) em uma variável. Então você apenas faz 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 xargsem casos como esses. Lembre-se de 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

(novamente, peço desculpas se eu errar a sintaxe -i, não posso testar agora. Verifique a página de manual se isso explodir)

informação relacionada