pidof

Zwraca PID-y procesów o podanej nazwie programu.

pidof znajduje identyfikatory procesów (PID) działających programów po ich nazwie. Zamiast przekopywać się przez ps aux i wzrokowo szukać właściwej linijki, podajesz nazwę programu, a dostajesz gołe numery PID-ów oddzielone spacjami. To czyni go idealnym do skryptów: wynik wpychasz prosto do kill albo do renice. Komenda przeszukuje listę procesów w /proc i domyślnie zwraca PID-y wszystkich pasujących instancji.

Składnia i najważniejsze opcje

Podstawowa składnia wygląda tak: pidof [opcje] nazwa_programu

  • -s — single shot: zwraca tylko jeden PID, nawet jeśli działa wiele instancji.
  • -x — uwzględnia też skrypty: zwraca PID-y powłok wykonujących skrypt o podanej nazwie (kluczowe przy skryptach bash/python).
  • -o PID — pomija wskazany PID; przydatne -o %PPID, by wykluczyć proces rodzica.
  • -q — tryb cichy: nic nie wypisuje, ustawia tylko kod wyjścia (świetne w if).
  • -z — pokazuje również procesy bez widocznej linii poleceń (np. wątki jądra, zombie).
  • -c — zwraca tylko procesy z tym samym katalogiem głównym (root) — działa tylko dla roota.
  • -d ZNAK — zmienia separator między PID-ami (domyślnie spacja).
  • -n — pomija stat() na binariach z systemów sieciowych typu NFS (szybciej, gdy NFS wisi).

Przykłady użycia

  • pidof sshd — wypisuje PID-y wszystkich działających procesów demona SSH.
  • kill $(pidof firefox) — ubija wszystkie procesy Firefoksa naraz, bez ręcznego przepisywania numerów.
  • pidof -s nginx — zwraca pojedynczy PID nginxa, gdy w skrypcie potrzebujesz tylko jednego.
  • pidof -x backup.sh — sprawdza, czy Twój skrypt backup.sh akurat się wykonuje (ochrona przed podwójnym uruchomieniem).
  • if pidof -q mysqld; then echo "MySQL działa"; fi — cichy test obecności procesu w warunku.

Częste błędy i pułapki

Najczęstsza wpadka: pidof dopasowuje nazwę programu, a nie dowolny fragment linii poleceń. Wpisanie pidof skrypt.sh bez flagi -x zwykle nic nie zwróci, bo realnym procesem jest bash, nie sam plik — dodaj -x. Jeśli komenda nic nie wypisze, kod wyjścia wynosi 1, co warto sprawdzać w skryptach.

Druga pułapka to przenośność. pidof jest narzędziem Linuksa (pochodzi z procps-ng lub sysvinit-utils, zależnie od dystrybucji) i drobne flagi potrafią się różnić. Na macOS i BSD go po prostu nie ma — tam używasz pgrep. Pamiętaj też, że długie nazwy procesów bywają obcinane, więc dopasowanie musi być dokładne, a nie częściowe — od dopasowań po wzorcu jest właśnie pgrep.

Powiązane komendy: pgrep, pkill, ps, kill, killall, top.