Mostrar el PID con scripts bash

Mostrar el PID con scripts bash

Buen día a todos,

Estoy intentando escribir un script bash para mostrar todos los procesos de Java, sin embargo, me gustaría que se muestre de la siguiente manera.

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

El problema con lo anterior es que solo muestra un PID en particular.

Entonces quiero ps aux|grep j\[a\]vaobtener el PID de cada uno y luego ejecutar cada PID en el comando anterior.

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

Supongo que se creará algún tipo de bucle como el bucle for.

Respuesta1

No en un lugar donde pueda probar esto, pero debería funcionar. reades una parte estándar de las secuencias de comandos de shell, coloca algo de la entrada estándar (que puede ser una secuencia o un dispositivo como /dev/tty) en una variable. Luego simplemente haces un bucle 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

O más simplemente, si tu UNIX tiene pgrep:

pgrep java | while read PID
do
    ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done

A veces puedes utilizar xargsen casos como estos. Recuerde que, de forma predeterminada, xargs coloca un grupo de argumentos al final del comando. Entonces necesitas alimentarlo uno a la vez (con -n1) y colocar el PID donde quieras, con -i:

pgrep java | xargs -n1 -i{} ps -p {} -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS

(Nuevamente, me disculpo si entiendo mal la sintaxis -i, no puedo realizar la prueba ahora. Consulte la página de manual si esto falla)

información relacionada