pgrep și pkill în Linux / Bash

Găsește procesele după nume (pgrep) sau le trimite un semnal direct după nume (pkill), fără să cauți PID-ul manual.

Sintaxă comandă
pgrep [opțiuni] tipar
pkill [-semnal] [opțiuni] tipar

Ce face pgrep și pkill

pgrep caută în lista proceselor și afișează PID-urile celor al căror nume se potrivește cu tiparul (o expresie regulată extinsă). Înlocuiește combinația ps aux | grep nume și nu se găsește pe sine în rezultate.

pkill folosește aceleași criterii de căutare, dar în loc să afișeze PID-urile trimite un semnal proceselor găsite, implicit SIGTERM. Ambele întorc codul 0 dacă au găsit cel puțin un proces și 1 dacă nu, așa că se folosesc ușor în condiții if.

Opțiuni și argumente

Opțiune / Parametru Descriere
-f Caută în linia de comandă completă, nu doar în numele procesului.
-a pgrep: afișează și linia de comandă completă lângă PID.
-l pgrep: afișează și numele procesului.
-u UTILIZATOR Doar procesele utilizatorului dat.
-x Potrivire exactă a numelui, nu parțială.
-c pgrep: afișează doar numărul proceselor găsite.
-n, -o Doar cel mai nou (-n) sau cel mai vechi (-o) proces găsit.
-SEMNAL pkill: semnalul trimis, de exemplu -HUP, -9 sau -USR1.

Exemple

Exemplul 1: PID-urile proceselor nginx, cu numele lor

Opțiunea -l afișează numele lângă fiecare PID.

pgrep -l nginx

Ieșire în terminal

1200 nginx
1201 nginx
1202 nginx

Exemplul 2: Verificare și oprire într-un script

Pornim un proces de test, verificăm cu pgrep -f că rulează, îl oprim cu pkill -f și verificăm din nou. Ieșirea lui pgrep (PID-urile) merge în /dev/null, ne interesează doar codul de ieșire.

sleep 301 &
disown
if pgrep -f "sleep 301" > /dev/null; then
  echo "Procesul de test rulează"
fi
pkill -f "sleep 301"
sleep 0.5
if ! pgrep -f "sleep 301" > /dev/null; then
  echo "Procesul a fost oprit"
fi

Rezultat

Procesul de test rulează
Procesul a fost oprit

Exemplul 3: Reîncărcarea configurației unui serviciu cu SIGHUP

Multe servicii își recitesc configurația la SIGHUP. Cu -x, potrivirea numelui este exactă.

sudo pkill -HUP -x rsyslogd
pgrep -c -u www-data php-fpm

Ieșire în terminal

5

Greșeli frecvente

  • Un tipar prea general cu pkill: pkill php oprește toate procesele care conțin „php” în nume. Verifică întâi cu pgrep -a ce va fi oprit.
  • Uitarea lui -f când procesul este un script: numele procesului este interpretorul (python3, bash), iar numele scriptului apare doar în linia de comandă completă.
  • Folosirea directă a -9 (SIGKILL): procesul nu mai apucă să-și salveze datele. Încearcă întâi semnalul implicit SIGTERM.

Comenzi înrudite

  • ps: Afișează o captură instantanee (snapshot) a proceselor active din sistem.
  • kill: Trimite un semnal de control sau oprire către un proces specificat prin ID (PID).
  • killall: Oprește toate procesele care rulează sub un anumit nume de executabil.
  • top: Monitorizează interactiv și în timp real procesele, încărcarea procesorului și memoria RAM.