Przejdź do głównej zawartości

pgrep


Cel sekcji: Krótko wprowadza czytelnika w tematykę komendy. Zawartość:

  • pgrep – wyszukuje identyfikatory procesów (PID) według nazwy, fragmentu polecenia lub wyrażenia regularnego.
  • Kluczowe zastosowania: szybkie filtrowanie procesów, tworzenie skryptów administracyjnych, diagnostyka (w połączeniu z kill, xargs, ps).
  • Często używane wraz z pkill (zabija procesy dopasowane wzorcem) i pidof (znajduje PID po nazwie pliku wykonywalnego).
  • Dostępne w większości dystrybucji Linux (pakiet procps/procps-ng). W systemach BSD i Solaris istnieją zgodne odpowiedniki, lecz część opcji może się różnić.

Okno terminala
pgrep [opcje] <wzorzec>
  • <wzorzec> to wyrażenie regularne dopasowywane domyślnie do nazwy procesu; użyj -f, aby dopasowywać do pełnej linii poleceń.
  • Warianty wywołania: interaktywnie w terminalu lub w skryptach (np. do warunkowego wykonywania działań).
  • Wspólne przełączniki: tryb szczegółowy listowania (-l, -a), dopasowanie ścisłe (-x), ignorowanie wielkości liter (-i), filtrowanie po użytkowniku/TTY/PPID.

ParametrOpis
-fDopasowuje wzorzec do pełnej komendy (cmdline), a nie tylko do nazwy procesu.
-xŚcisłe dopasowanie całej nazwy/komendy (nie tylko fragmentu).
-iDopasowanie bez rozróżniania wielkości liter.
-lWypisuje PID oraz nazwę procesu.
-aWypisuje PID oraz pełną komendę procesu.
-cZwraca liczbę dopasowanych procesów zamiast listy PID.
-nZwraca tylko najmłodszy (najświeższy) dopasowany proces.
-oZwraca tylko najstarszy dopasowany proces.
-d <sep>Ustawia separator między PID‑ami (domyślnie znak nowej linii).
-u <euid[,euid...]>Filtrowanie po efektywnym UID użytkownika (nazwa lub numer).
-U <ruid[,ruid...]>Filtrowanie po rzeczywistym UID użytkownika.
-P <ppid[,ppid...]>Filtrowanie po PID rodzica (PPID).
-g <pgid[,pgid...]>Filtrowanie po ID grupy procesów.
-s <sid[,sid...]>Filtrowanie po ID sesji.
-t <tty[,tty...]>Filtrowanie po terminalu/TTY (np. pts/0, tty1).
-vNegacja dopasowania (pokaż procesy, które nie pasują do wzorca).
-VWypisuje wersję programu.
-hKrótka pomoc.

Okno terminala
# 1) Wypisz PID i nazwę wszystkich procesów nginx
pgrep -l nginx
# Efekt: np. "1234 nginx", "5678 nginx: worker process".
Okno terminala
# 2) Znajdź procesy Pythona uruchomione z server.py (dopasowanie do pełnej komendy)
pgrep -fa 'python.*server.py'
# Efekt: PID oraz pełna linia poleceń pasująca do regexu.
Okno terminala
# 3) Policz procesy nginx uruchomione przez użytkownika www-data
pgrep -c -u www-data nginx
# Efekt: wypisuje liczbę dopasowań (np. 4).
Okno terminala
# 4) Wyślij sygnał do najnowszego procesu dopasowanego do wzorca (ostrożnie!)
kill -HUP "$(pgrep -n nginx)"
# Efekt: sygnał HUP do najświeższego procesu nginx.
Okno terminala
# 5) Dokładne dopasowanie nazwy procesu (bez regexu)
pgrep -x sshd
# Efekt: zwraca PID tylko jeśli nazwa procesu to dokładnie 'sshd'.
Okno terminala
# 6) Procesy powłoki na konkretnym TTY
pgrep -t pts/0 -l bash
# Efekt: PID i nazwa bash powiązanego z terminalem pts/0.

  • Regex vs. glob: pgrep używa wyrażeń regularnych, nie wzorców powłoki. Dla ścisłego dopasowania użyj -x lub zakotwicz wzorzec (^...$).
  • Zakres dopasowania: Domyślnie dopasowuje nazwę procesu; przełącz -f, aby szukać w pełnej komendzie i argumentach.
  • Uprawnienia: Zwykły użytkownik zazwyczaj widzi tylko własne procesy. Aby przeszukiwać cudze, użyj sudo (w niektórych konfiguracjach wymagane są rozszerzone uprawnienia do /proc).
  • Wyjście/Status: Kod wyjścia 0 – znaleziono dopasowanie; 1 – brak dopasowań; 2 – błąd (np. zły argument/regex). To przydatne w skryptach warunkowych.
  • Różnice między systemami: Implementacje w procps‑ng (Linux) i BSD/Solaris mogą różnić się detalami i dostępnością flag (np. -a). Sprawdź man pgrep na swojej platformie.

Błąd / KomunikatPrzyczynaRozwiązanie
Brak wyjścia i kod 1Brak dopasowań do wzorcaSprawdź regex, użyj -f lub -x, ewentualnie -i dla ignorowania wielkości liter.
pgrep: invalid user nameNieprawidłowa nazwa użytkownika w -u/-UUżyj poprawnej nazwy lub numeru UID; sprawdź getent passwd <user>.
pgrep: invalid regular expressionBłąd w składni regexuZweryfikuj nawiasy/escape; przetestuj wzorzec w grep -E.
pgrep: option requires an argument -- 'u'Brak wymaganej wartości po fladzePodaj listę wartości: np. -u www-data,root.
Operation not permitted / puste wyniki dla cudzych procesówBrak uprawnień do odczytu danych innych użytkownikówUżyj sudo, uruchom jako root lub zawęź do własnych procesów.