Wie bekomme ich nur alle laufenden Prozess-IDs?

8

ich weiß das

ps ax

gibt die Pids zurück

1 ?        Ss     0:01 /sbin/init
2 ?        S<     0:00 [kthreadd]
3 ?        S<     0:00 [migration/0]

Alles was ich brauche ist diese Saiten zu reinigen, aber ich konnte es nicht mit sed machen, weil ich nicht den richtigen regulären Ausdruck schreiben konnte. Kannst du mir helfen?

Jader Dias
quelle

Antworten:

19

Verwenden Sie die ps-Ausgabeformatierung:

ps-A-o pid

Die Ausgabeformatierung des Befehls ist die beste Option. Die Option o steuert die Ausgabeformatierung. Ich habe unten einige Argumente aufgelistet, siehe 'man ps' für den Rest (um mehrere zu verwenden, wäre es -o pid,cmd,flags).

KEY   LONG         DESCRIPTION
   c     cmd          simple name of executable
   C     pcpu         cpu utilization
   f     flags        flags as in long format F field
   g     pgrp         process group ID
   G     tpgid        controlling tty process group ID
   j     cutime       cumulative user time
   J     cstime       cumulative system time
   k     utime        user time
   o     session      session ID
   p     pid          process ID

Awk oder Cut wäre besser, um Spalten zu erhalten: Im
Allgemeinen möchten Sie keinen regulären Ausdruck für die Auswahl der ersten Spalte, Sie möchten ihn zum Schneiden leiten oder awk zum Ausschneiden der ersten Spalte wie folgt:

ps ax | awk '{print $1}'

Regex ist eine Option, wenn nicht die beste:
Wenn Sie Regex verwenden, könnte dies etwa so aussehen:

ps ax | perl -nle 'print $1 if /^ *([0-9]+)/'

$ 1 druckt nur das, was in der Klammer übereinstimmt. ^ verankert das am Zeilenanfang. Leerzeichen bedeutet, dass optionale Leerzeichen vor der Nummer zulässig sind. [0-9] + bedeutet eine oder mehrere Ziffern. Aber ich würde Regex für diese spezielle Aufgabe nicht empfehlen. Sehen Sie, warum? :-)

Kyle Brandt
quelle
Vielen Dank! aber der reguläre Ausdruck wäre eine großartige Ergänzung, wenn jemand mit einer zweiten Antwort beitragen könnte
Jader Dias
1
Verwenden Sie wirklich awk.
David Pashley
Achten Sie darauf, dass der Regex nicht mit den Anfangsräumen vor kleinen Pids übereinstimmt. Außerdem sollte eine PID mindestens aus einer Ziffer bestehen, nicht aus Null (Sie sollten + und nicht * verwenden)
drAlberT
AlberT, oh guter Punkt, habe nicht gesehen, dass sie richtig gerechtfertigt waren. Deshalb habe ich gesagt, Regex ist nicht das Beste, was ich denke, wird behoben :-)
Kyle Brandt
Ich kann nicht darüber streiten, wie man Cut verwendet, natürlich anhand der Anfangsräume. Können Sie mich darauf hinweisen, wie man Schnitt verwendet? Nur aus Neugier :)
drAlberT
6
ps ax | awk '{ print $1; }'
Chad Huneycutt
quelle
5

Verwenden Sie den Schalter -o , um eine Ausgabe im Cust-Format zu erhalten

ps -o pid

Der schlechte Weg mit sed, wie Sie ausdrücklich gefragt haben, kann sein

ps -ax | sed 's#^\( *[0-9]\+\) .*$#\1#'
drAlberT
quelle
0

ps -eo pid oder ps -eo% p

-e Alle Prozesse auswählen -o Format pid = Prozess-ID% p sameas pid

Jesus Arechiga
quelle