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 phpoprește toate procesele care conțin „php” în nume. Verifică întâi cupgrep -ace va fi oprit. - Uitarea lui
-fcâ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 implicitSIGTERM.
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.