GNU/Linux >> Znalost Linux >  >> Linux

Jak přimět pgrep, aby zobrazoval úplné informace o procesu

Ř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

Linux
  1. Jak získat ID procesu na pozadí?

  2. Jak získat návratovou hodnotu z CHILD PROCESS?

  3. Jak získat úplnou cestu k souboru?

  1. Jak získat podřízený proces z rodičovského procesu

  2. Jak získat pouze ID procesu v zadaném názvu procesu v linuxu?

  3. Jak získat číslo displeje, které mi přidělil X

  1. Programově získat nadřazené pid jiného procesu?

  2. Jak získat ID procesu pro ukončení procesu nohup?

  3. Jak získat PID z rozvětveného podřízeného procesu ve skriptu shellu