pgrep

Wyszukuje PID procesów pasujących do nazwy lub wzorca.

pgrep przeszukuje tablicę procesów działających w systemie i wypisuje PID-y tych, które pasują do podanej nazwy lub wzorca. Zamiast bawić się w klasyczne ps aux | grep nazwa (i odfiltrowywać sam proces grep z wyników), dostajesz od razu czyste numery PID, gotowe do podania kolejnym poleceniom. To narzędzie z pakietu procps-ng, obecne praktycznie na każdym Linuksie, i jeden z pierwszych odruchów, gdy chcesz sprawdzić, czy coś chodzi i pod jakim numerem.

Składnia i najważniejsze opcje

Podstawowa forma to pgrep [opcje] wzorzec, gdzie wzorzec domyślnie traktowany jest jako wyrażenie regularne dopasowywane do nazwy procesu.

  • -l — wypisuje PID razem z nazwą procesu, a nie sam numer.
  • -a — pokazuje PID i pełną linię poleceń (z argumentami).
  • -f — dopasowuje wzorzec do całej linii poleceń, nie tylko do nazwy procesu.
  • -u uid — ogranicza wyniki do procesów danego użytkownika (efektywny UID).
  • -x — wymaga dokładnego dopasowania nazwy, bez fragmentów.
  • -n / -o — zwraca tylko najnowszy (-n) lub najstarszy (-o) pasujący proces.
  • -c — zamiast listy PID-ów wypisuje samą liczbę dopasowań.
  • -i — ignoruje wielkość liter we wzorcu i nazwach procesów.

Przykłady użycia

  • pgrep nginx — wypisuje PID-y wszystkich procesów, których nazwa zawiera „nginx”.
  • pgrep -a ssh — pokazuje PID-y i pełne polecenia procesów związanych z ssh, więc od razu widzisz, kto i z czym się łączy.
  • pgrep -u www-data php-fpm — znajduje procesy php-fpm należące do użytkownika www-data.
  • pgrep -f "manage.py runserver" — dopasowuje po całej linii poleceń, dzięki czemu złapiesz skrypt Pythona, którego nazwa procesu to po prostu „python”.
  • pgrep -c chrome — zwraca liczbę procesów Chrome, idealne do szybkiego sprawdzenia, ile ich się rozmnożyło.

Częste błędy i pułapki

Najczęstsza wpadka: domyślnie pgrep dopasowuje tylko nazwę procesu, a ta jest ucięta do 15 znaków i nie zawiera argumentów. Szukając skryptu uruchomionego przez interpreter (Python, Node, Java), użyj -f, inaczej dostaniesz pustkę albo zły wynik. Pamiętaj też, że wzorzec to regex, nie zwykły tekst — kropki i nawiasy mają znaczenie specjalne.

Druga pułapka to różnice między systemami. Na Linuksie (procps-ng) -a oznacza „wypisz pełną linię poleceń”, ale na macOS i BSD ta sama flaga znaczy „uwzględnij procesy przodków” — łatwo się naciąć, kopiując polecenia między maszynami. Flaga -c (liczenie) również jest specyfiką Linuksa.

I uwaga z gatunku oczywistych: pgrep tylko znajduje, niczego nie zabija. Jeśli chcesz wysłać sygnał, jego bliźniak pkill robi to bezpośrednio — ale wtedy warto najpierw odpalić pgrep z tym samym wzorcem, żeby zobaczyć, co dokładnie poleci do ubicia.

Powiązane komendy: pkill, ps, kill, top, pidof.