PID aus einer Prozessliste ermitteln

Datum: 2001-06-21
Quelle: suse-linux

Worum ging es?

Im konkreten Fall ging es um das Ermitteln der Prozess-IDs aus einer ps ax-Ausgabe. Dabei sollten nur sendmail-Prozesse ausgegeben werden.

Code
# sed, cut
ps ax | grep "sendmail -q1m" | \
  sed 's/^ *//' | cut -f1 -d" " >/var/run/sendmail-q.pid
# perl
ps ax | grep "sendmail -q1m" | \
  perl -ne 's/^ +(\d+) .*$/$1/; print;' >/var/run/sendmail-q.pid
# sed
ps ax | grep "sendmail -q1m" | \
  sed 's/^ *//; s/ .*$//' >/var/run/sendmail-q.pid
# sed
ps ax | grep "sendmail -q1m" | \
  sed 's/^ *\([0-9]*\) .*$/\1/' >/var/run/sendmail-q.pid
# awk
ps ax | grep "sendmail -q1m" | \
  awk ' { print $1 } ' - >/var/run/sendmail-q.pid
Beschreibung

Es muss immer das erste Feld aus der Ausgabe herausgefiltert werden und dabei führende Leerzeichen entfernt werden. Die gezeigten Beispiele sind nicht richtig optimal - die Kommandos sed, awk und perl können z. B. selbst die zutreffenden Zeilen der Ausgabe ermitteln, der grep ist dann überflüssig. Und mit spezialisierten Programmen wie pidof lässt sich noch einiges vereinfachen.