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 wif).-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— pomijastat()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 skryptbackup.shakurat 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.