Lösung 1:
pgrep
Die Ausgabeoptionen von sind ziemlich begrenzt. Sie müssen es mit ziemlicher Sicherheit bis ps
zurücksenden um die wichtigen Informationen herauszuholen. Sie könnten dies automatisieren, indem Sie eine Bash-Funktion in Ihrem ~/.bashrc
verwenden .
function ppgrep() { pgrep "[email protected]" | xargs --no-run-if-empty ps fp; }
Rufen Sie dann den Befehl mit.
aufppgrep <pattern>
Lösung 2:
Kombiniere pgrep
mit ps
mit xargs
!
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
Versuchen Sie es zum Beispiel
pgrep -u user | xargs ps -f -p
um eine vollständige Prozessliste von user
zu erhalten . Option -u user
begrenzt pgrep
an den Benutzer gegeben (als Nummer oder Name), während der ps
Optionen -f -p
Fordern Sie eine vollständige Formatliste für die ausgewählte PID an.
Es ist schön, dass Sie die erste Zeile mit den Spaltennamen beibehalten. grep
löscht immer die Spaltennamen.
Lösung 3:
Im Folgenden erhalten Sie nur PID + vollständige Befehlszeile. Für "alle Infos ps
tut", siehe andere Antworten...
Die meisten Linux verwenden procps-ng. Seit 3.3.4 (veröffentlicht 2012), pgrep -a
(--list-full
) zeigt die vollständige Befehlszeile.
Hinweis:Standardmäßig vergleicht pgrep nur das von Ihnen angegebene Muster mit dem Namen der ausführbaren Datei. Wenn Sie mit der vollständigen Befehlszeile übereinstimmen möchten (wie es grepping ps tut), fügen Sie den -f
hinzu (--full
)-Option.
In älteren Versionen (einschließlich des ursprünglichen procps-Projekts) -l
Option zeigte Informationen, aber ihr Verhalten war unterschiedlich:
pgrep -fl
hat das Muster mit der vollständigen Befehlszeile abgeglichen und die vollständige Befehlszeile angezeigt.pgrep -l
allein stimmte nur mit dem Namen der ausführbaren Datei überein und zeigte nur den Namen der ausführbaren Datei.
Wenn Sie keine vollständige Übereinstimmung wünschen, können Sie die vollständige Befehlszeile nicht sehen :-([https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15]
Nicht sicher, welchen Code *BSD verwendet, aber ihre Manpage dokumentiert den alten -fl
Verhalten.
Leider können Sie nicht einmal -fl
verwenden portabel - in den letzten procps-ng, -f
(--list-name
) gibt immer nur den Namen der ausführbaren Datei aus.
Lösung 4:
Linux
Für die GNU-Version von pgrep
lang + unscharfe Ausgabe wird mit -af
erreicht und die Zeichenfolge muss zwischen Groß- und Kleinschreibung unterscheiden (d. h. es gibt keine Option zur Unterscheidung zwischen Groß- und Kleinschreibung). ).
$ pgrep -af apache
OUTPUT:
1748 /usr/sbin/apache2 -k start
Handbuchseite:
-a, --list-full
List the full command line as well as the process ID. (pgrep only.)
-f, --full
The pattern is normally only matched against the process name.
When -f is set, the full command line is used.
MacOS
Unter OSX (und folglich auch unter BSD) -l
(lange Ausgabe ) in Kombination mit -f
(Abgleich mit vollständigen Argumentlisten ) zeigt den vollständigen Befehl (-i
fügt Groß-/Kleinschreibung hinzu):
$ pgrep -fil ssh
OUTPUT:
33770 ssh: [email protected] [mux] t
Die Manpage:
-l Long output. For pgrep, print the
process name in addition to the
process ID for each matching
process. If used in conjunction
with -f, print the process ID and
the full argument list for each
matching process. For pkill, dis-
play the kill command used for
each process killed.
Lösung 5:
Verwenden Sie die Option -v für grep - es gibt alles zurück, ABER das angeforderte Muster.
ps -ef | grep <process> | grep -v grep