Czy jest jakiś sposób, aby uzyskać pgrep
wszystkie informacje na temat każdego procesu ps
? Wiem, że potrafię ps
przepuszczać, grep
ale to dużo pisania i daje mi to grep
sam proces, którego nie chcę.
26
pgrep
Opcje wyjściowe są dość ograniczone. Prawie na pewno będziesz musiał wysłać go z powrotem, ps
aby uzyskać ważne informacje. Możesz to zautomatyzować za pomocą funkcji bash w swoim ~/.bashrc
.
function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }
Następnie wywołaj polecenie za pomocą.
ppgrep <pattern>
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }
W przeciwnym razie, jeśli żaden proces nie odpowiada twojemu wyszukiwaniu, zrzuca całąps
megillę użycia.ps
potrzebny jest łącznik do flag:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
która wykona polecenie tylko wtedy, gdy otrzyma listę.ps fp $(pgrep -d, "$@")
Połącz
pgrep
zps
użyciemxargs
!Na przykład spróbuj
aby uzyskać pełną listę procesów
user
.Miło jest zachować pierwszy wiersz z nazwami kolumn.
grep
zawsze upuszcza nazwy kolumn.źródło
Poniżej podano tylko PID + pełny wiersz polecenia. Aby uzyskać „wszystkie informacje
ps
”, zobacz inne odpowiedzi ...Większość linuksów używa procps-ng . Od wersji 3.3.4 (wydanej w 2012 r.)
pgrep -a
(--list-full
) Pokazuje pełną linię poleceń.Uwaga: Domyślnie pgrep pasuje tylko do wzorca podanego względem nazwy pliku wykonywalnego. Jeśli chcesz dopasować do pełnej linii poleceń (podobnie jak grepping ps), dodaj opcję
-f
(--full
).W starszych wersjach (w tym w oryginalnym projekcie procps )
-l
opcja wyświetlała informacje, ale jej zachowanie było różne:pgrep -fl
dopasował wzór do pełnej linii poleceń i pokazał pełną linię poleceń.pgrep -l
sam pasował tylko do nazwy pliku wykonywalnego i pokazywał tylko nazwę pliku wykonywalnego.Jeśli nie chcesz pełnego dopasowania, nie możesz zobaczyć pełnego wiersza poleceń :-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]
Nie jestem pewien, jakiego kodu używa BSD, ale ich strona podręcznika man dokumentuje stare
-fl
zachowanie.Niestety nie można nawet używać
-fl
przenośnie - w ostatnim procps-ng-f
(--list-name
) zawsze drukuje tylko nazwę pliku wykonywalnego.źródło
Linux
Dla wersji GNU
pgrep
tym-i
(bez uwzględniania wielkości liter) nie jest obsługiwany, a długi + wyjście rozmytej osiąga się-af
.Strona podręcznika :
System operacyjny Mac
W OSX (i przez wnioskowanie, w BSD)
-l
( długie wyjście ) w połączeniu z-f
( dopasuj do pełnych list argumentów ) wyświetli pełne polecenie (-i
dodaje rozróżnianie wielkości liter):Strona podręcznika :
źródło
Użyj opcji -v, aby grep - zwraca wszystko, ALE żądany wzorzec.
źródło
pgrep -u user | xargs ps -f -p
Nie wydaje mi się, że istnieje, najwięcej informacji, jakie możesz uzyskać, to nazwa i identyfikator procesu, używając opcji -l do pgrep.
ps obsługuje wszelkiego rodzaju opcje formatowania, więc utworzę alias dla tego, co chcesz zapisać. Prostym sposobem na wykluczenie procesu grep z danych wyjściowych jest dołączenie dodatkowego potoku w
grep -v grep
celu wykluczenia jakichkolwiek procesów grep.źródło
Aby wyeliminować ten
grep
proces, możesz użyć nawiasów jako części swojego wzoru:Możesz to zrobić za pomocą
ps
ipgrep
:źródło
Pomoże ci to chyba:
ps auxww
źródło