Bei Verwendung grep
wie folgt:
ps aux | grep 'processname' | awk '{print $2}'
Die Anzahl PIDs
der Prozesse mit processname
wird zurückgegeben. Bei Verwendung davon:
ps aux | grep '^processname' | awk '{print $2}'
Ich versuche, Prozesse abzurufen, deren Befehlszeile mit beginnt processname
, aber es funktioniert nicht.
Beispiel für laufende Prozesse:
processname
other_processname
Ich möchte PID
die erste Option erhalten, da processname
dies der Anfang des Befehls ist.
Ich habe auch versucht, die -E, -e, -w
Flags zu verwenden, und sie liefern alle das gleiche Ergebnis. Was ist falsch?
Antwort1
^
markiert den Anfang einer Zeile, nicht eines Feldes.
ps aux | grep ' processname'
wird näher kommen, aber es könnte trotzdem noch einige falsche Ergebnisse geben.
Da die Breite der anderen Spalten fest ist, können Sie auch
grep '^.\{65\}processname'
Hier ^.\{65\}
sind es genau 65 Zeichen ab Zeilenanfang. Die genaue Zahl kann auf Ihrem System abweichen.
Da Sie bereits awk verwenden, wäre dies wahrscheinlich eine bessere Option:
ps aux | awk '{ if ($11 == "processname") print $2 }'
Sie können die Ausgabe von ps auch neu formatieren, um das Greppen zu erleichtern:
ps ax -o pid,args | grep '^[^ ]\+ processname'
Der Schalter -o pid,args
bewirkt, dass ps nur die PID und den Befehl mit Argumenten anzeigt. Der Ausdruck ^[^ ]\+
passt auf alle Zeichen vom Zeilenanfang bis zum ersten Leerzeichen.