Antworten:
pgrep
Die Ausgabeoptionen von sind ziemlich begrenzt. Sie müssen es mit ziemlicher Sicherheit zurückschicken ps
, um die wichtigen Informationen zu erhalten. Sie können dies automatisieren, indem Sie eine Bash - Funktion in Ihrem System verwenden ~/.bashrc
.
function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }
Rufen Sie dann den Befehl mit auf.
ppgrep <pattern>
ps
ein Bindestrich für die Flags benötigt:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
die den Befehl nur dann ausführt, wenn sie eine Liste erhalten hat.
ps fp $(pgrep -d, "$@")
Kombinieren Sie pgrep
mit ps
mit xargs
!
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
Zum Beispiel versuchen
pgrep -u user | xargs ps -f -p
um eine vollständige Prozessliste von zu erhalten user
.
Schön, dass Sie die erste Zeile mit den Spaltennamen behalten. grep
löscht immer die Spaltennamen.
Im Folgenden wird nur die vollständige PID + -Befehlszeile angezeigt. Für "all the info ps
does", siehe andere Antworten ...
Die meisten Linux- Betriebssysteme verwenden procps-ng . Seit 3.3.4 (veröffentlicht im Jahr 2012) zeigt pgrep -a
( --list-full
) die vollständige Befehlszeile.
Hinweis: Standardmäßig vergleicht pgrep nur das von Ihnen angegebene Muster mit dem Namen der ausführbaren Datei. Wenn Sie eine Übereinstimmung mit der vollständigen Befehlszeile erzielen möchten (wie bei grepping ps), fügen Sie die Option -f
( --full
) hinzu.
In älteren Versionen (einschließlich des ursprünglichen procps- Projekts) -l
zeigte die Option Informationen an, aber das Verhalten war unterschiedlich:
pgrep -fl
Das Muster wurde mit der vollständigen Befehlszeile abgeglichen und die vollständige Befehlszeile angezeigt.pgrep -l
Alleine stimmt nur mit dem Namen der ausführbaren Datei überein und zeigt nur den Namen der ausführbaren Datei an. Ich bin nicht sicher, welchen Code * BSD verwendet, aber die Manpage dokumentiert das alte -fl
Verhalten.
Leider können Sie es nicht einmal -fl
portabel verwenden - in neueren procps-ng gibt -f
( --list-name
) immer nur den Namen der ausführbaren Datei aus.
Für die GNU-Version wird pgrep
der -i
(case-insensitivity) nicht unterstützt, und Long + Fuzzy-Ausgabe wird mit erreicht -af
.
$ pgrep -af apache
OUTPUT:
1748 /usr/sbin/apache2 -k start
Manpage :
-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.
Unter OSX (und folglich unter BSD) -l
( lange Ausgabe ) wird in Kombination mit -f
( Übereinstimmung mit vollständigen Argumentlisten ) der vollständige Befehl angezeigt ( -i
Groß- / Kleinschreibung wird nicht berücksichtigt):
$ pgrep -fil ssh
OUTPUT:
33770 ssh: abc@192.168.0.123-22 [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.
Verwenden Sie die Option -v für grep - sie gibt alles zurück, ABER das angeforderte Muster.
ps -ef | grep <process> | grep -v grep
pgrep -u user | xargs ps -f -p
Ich glaube nicht, dass dies der Fall ist. Die meisten Informationen, die Sie erhalten können, sind der Name und die Prozess-ID, wenn Sie die Option -l für pgrep verwenden.
ps unterstützt alle Arten von Formatierungsoptionen, daher würde ich nur einen Alias für das erstellen, was Sie für die Eingabe speichern möchten. Eine einfache Möglichkeit, den grep-Prozess von der Ausgabe auszuschließen, besteht darin, eine zusätzliche Pipe grep -v grep
einzuschließen, um alle grep-Prozesse auszuschließen.
Um den grep
Prozess zu eliminieren , können Sie Klammern als Teil Ihres Musters verwenden:
ps -ef | grep '[t]ty'
Sie können dies mit ps
und tun pgrep
:
ps -fp $(pgrep -d, tty)
Dies wird Ihnen helfen, denke ich:
ps auxww
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }
Wenn keine Prozesse mit Ihrer Suche übereinstimmen, wird eine ganzeps
Megilla ausgegeben.