Exibe o PID com script bash

1

Bom dia a todos,

Estou tentando escrever um script bash para mostrar todos os processos de java, no entanto, gostaria que ele 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 em particular.

Então, eu quero ps aux|grep j\[a\]va obter o PID de cada um e, em seguida, 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 loop?

    
por Reinhardt Ratkas van Rooyen 28.10.2014 / 15:56

1 resposta

0

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)

    
por 28.10.2014 / 16:11

Tags