Řešení 1:
pgrep
Možnosti výstupu jsou značně omezené. Téměř jistě jej budete muset poslat zpět prostřednictvím ps
pro získání důležitých informací. Můžete to zautomatizovat pomocí funkce bash ve vašem ~/.bashrc
.
function ppgrep() { pgrep "[email protected]" | xargs --no-run-if-empty ps fp; }
Poté zavolejte příkaz pomocí.
ppgrep <pattern>
Řešení 2:
Kombinovat pgrep
s ps
pomocí xargs
!
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
Zkuste například
pgrep -u user | xargs ps -f -p
získat úplný seznam procesů user
. Možnost -u user
limity pgrep
zadanému uživateli (jako číslo nebo jméno), zatímco ps
možnosti -f -p
vyžádejte si výpis plného formátu pro vybraný PID.
Je fajn, že si necháte první řádek s názvy sloupců. grep
vždy odstraní názvy sloupců.
Řešení 3:
Následující vám poskytne pouze PID + celý příkazový řádek. Pro "všechny informace ps
ano“, viz další odpovědi...
Většina linuxů používá procps-ng. Od 3.3.4 (vydáno v roce 2012), pgrep -a
(--list-full
) zobrazí celý příkazový řádek.
Poznámka:Ve výchozím nastavení pgrep odpovídá pouze vzoru, který zadáte, se jménem spustitelného souboru. Pokud chcete porovnat s celým příkazovým řádkem (jako grepping ps), přidejte -f
(--full
).
Ve starších verzích (včetně původního projektu procps) -l
možnost zobrazila informace, ale její chování se lišilo:
pgrep -fl
porovnal vzor s úplným příkazovým řádkem a ukázal celý příkazový řádek.pgrep -l
samotný odpovídal pouze názvu spustitelného souboru a zobrazil pouze název spustitelného souboru.
Pokud nechcete úplnou shodu, nemůžete vidět celý příkazový řádek :-([https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15]
Nejste si jisti, jaký kód *BSD používá, ale jejich manuálová stránka dokumentuje starý -fl
chování.
Bohužel nemůžete použít ani -fl
přenosné - v nejnovějším procps-ng, -f
(--list-name
) vždy vytiskne pouze název spustitelného souboru.
Řešení 4:
Linux
Pro GNU verzi pgrep
long + fuzzy výstup je dosažen s -af
a řetězec musí rozlišovat malá a velká písmena (tj. není zde možnost rozlišovat malá a velká písmena ).
$ pgrep -af apache
OUTPUT:
1748 /usr/sbin/apache2 -k start
Manuální stránka:
-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
Na OSX (a odvozeně i na BSD) -l
(dlouhý výstup ) v kombinaci s -f
(shoda s úplnými seznamy argumentů ) zobrazí celý příkaz (-i
přidává rozlišení malých a velkých písmen):
$ pgrep -fil ssh
OUTPUT:
33770 ssh: [email protected] [mux] t
Manuová stránka:
-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.
Řešení 5:
Použijte volbu -v pro grep - vrátí vše, kromě požadovaného vzoru.
ps -ef | grep <process> | grep -v grep