Zeigen Sie die PID mit Bash-Skripting an

Zeigen Sie die PID mit Bash-Skripting an

Guten Tag allerseits,

Ich versuche, ein Bash-Skript zu schreiben, um alle Java-Prozesse anzuzeigen. Ich hätte jedoch gerne, dass es wie folgt angezeigt wird.

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

Das Problem bei dem oben genannten ist, dass nur eine bestimmte PID angezeigt wird.

Ich möchte also ps aux|grep j\[a\]vadie PID von jedem erhalten und dann jeden PID im obigen Befehl ausführen.

ERGEBNIS:

 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

Ich vermute, es wird eine Art Schleife erstellt, ähnlich einer For-Schleife?

Antwort1

Nicht an einem Ort, an dem ich das testen kann, aber das sollte funktionieren. readist ein Standardteil von Shell-Skripten, es platziert etwas von stdin (das kann ein Stream oder ein Gerät wie /dev/tty sein) in eine Variable. Dann führen Sie einfach eine while-Schleife aus

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

Oder einfacher, wenn Ihr UNIX über pgrep verfügt:

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

In solchen Fällen können Sie es manchmal verwenden xargs. Denken Sie daran, dass xargs standardmäßig eine Gruppe von Argumenten an das Ende des Befehls setzt. Sie müssen es also einzeln eingeben (mit -n1) und die PID mit -i an der gewünschten Stelle platzieren:

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

(nochmals entschuldigen Sie, wenn ich die -i-Syntax falsch mache, ich kann es jetzt nicht testen. Sehen Sie auf der Manpage nach, wenn es schiefgeht)

verwandte Informationen