So erhalten Sie pgrep, um die vollständigen Prozessinformationen anzuzeigen


25

Gibt es eine Möglichkeit pgrep, mir alle Informationen zu jedem Vorgang zu geben, der ausgeführt pswird? Ich weiß , ich kann Rohr psdurch , grepaber das ist eine Menge Tipparbeit und es gibt mir auch die grepVerfahren selbst , das will ich nicht.

Antworten:


22

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>

2
Vielen Dank! Ich habe es folgendermaßen geändert: function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } Wenn keine Prozesse mit Ihrer Suche übereinstimmen, wird eine ganze psMegilla ausgegeben.
JoelFan

Unter OS X wird psein Bindestrich für die Flags benötigt:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
Erik Nomitch

1
Wenn Sie die ps-Verwendungsseite vermeiden möchten, hat GNU xargs eine Option, -rdie den Befehl nur dann ausführt, wenn sie eine Liste erhalten hat.
Doug

1
Noch prägnanter istps fp $(pgrep -d, "$@")
Igor Mikushkin

13

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.


Ausgezeichnet! dies behebt ein seltsames problem mit dem arcgis server start script für xfvb
prusswan

Dies sollte die akzeptierte Antwort sein, da Unix-Pipes ordnungsgemäß verwendet werden, eine Liste von PIDs von einem Tool abgerufen und in ein anderes zurückgespeist wird (wenn es wie Hackery aussieht, ist dies nicht der Fall - diese Technik kann in vielen UNIX-Tools verwendet werden Die Bash-Funktion ppgrep () ist eine unnötige Abhängigkeit und vermeidet es, sich der hier vorgestellten Lernmöglichkeit zu stellen.)
Scott Prive

10

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.
    Wenn Sie keine vollständige Übereinstimmung wünschen, wird die vollständige Befehlszeile nicht angezeigt :-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]

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.


4

Linux

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.

Mac OS

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.

1

Verwenden Sie die Option -v für grep - sie gibt alles zurück, ABER das angeforderte Muster.

ps -ef | grep <process> | grep -v grep

Dies war die beste Antwort für mich. Es zeigt Ihnen den vollständigen Befehl, ohne dabei abgeschnitten zu werdenpgrep -u user | xargs ps -f -p
BringBackCommodore64

0

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.


0

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)

-1

Dies wird Ihnen helfen, denke ich:

ps auxww


2
Können Sie das bitte näher erläutern? Weitere Informationen würden diese Antwort verbessern
Dave M
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.