Antworten:
pgrepDie 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>
psein Bindestrich für die Flags benötigt:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-rdie den Befehl nur dann ausführt, wenn sie eine Liste erhalten hat.
ps fp $(pgrep -d, "$@")
Kombinieren Sie pgrepmit psmit 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. greplöscht immer die Spaltennamen.
Im Folgenden wird nur die vollständige PID + -Befehlszeile angezeigt. Für "all the info psdoes", 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) -lzeigte 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 -lAlleine 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 -flVerhalten.
Leider können Sie es nicht einmal -flportabel verwenden - in neueren procps-ng gibt -f( --list-name) immer nur den Namen der ausführbaren Datei aus.
Für die GNU-Version wird pgrepder -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 ( -iGroß- / 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 grepeinzuschließen, um alle grep-Prozesse auszuschließen.
Um den grepProzess zu eliminieren , können Sie Klammern als Teil Ihres Musters verwenden:
ps -ef | grep '[t]ty'
Sie können dies mit psund 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 ganzepsMegilla ausgegeben.