pgrep-opdracht: een PID op naam vinden, de optie -f en het verschil met pidof en pkill
Om het nummer (PID) van een draaiend proces te vinden op naam, account of opdrachtregel, gebruikt u de opdracht pgrep. Op een AlmaLinux 9-server kopieerden we het programma sleep onder andere namen, startten we er drie en vergeleken we welke processen elke optie vond. Zoeken op naam gaf alleen die drie processen, terwijl zoeken in de hele opdrachtregel met -f ook de timeout gaf die ze had gestart.
De uitvoer hieronder komt van het root-account op een AlmaLinux 9.8-server en van een gewoon account op een Debian 12-server. Gezocht werd naar kopieën van sleep met de namen pgdemo-a en pgdemo-b, gestart met timeout 300 zodat ze na 5 minuten vanzelf stopten. Procesnummers (PID) en de Debian-accountnaam (user1) zijn vervangen door voorbeeldwaarden, en de procps-ng-versie op de AlmaLinux-server staat alleen tot de hoofd- en subversie vermeld.
1️⃣ Basisgebruik van de pgrep-opdracht
Als u na pgrep een deel van een naam schrijft, toont het de nummers van de processen waarvan de naam die tekens bevat, één per regel. Zoeken op pgdemo gaf drie nummers: twee pgdemo-a en één pgdemo-b.
pgrep pgdemo2143
2152
2155Met de naam tot en met pgdemo-a bleven alleen de twee pgdemo-a over.
pgrep pgdemo-a2143
2152De zoektekst wordt gelezen als uitgebreide reguliere expressie, en zonder opties zoekt pgrep alleen in de procesnaam.
Als geen enkel proces overeenkomt, stopt pgrep zonder iets te tonen, dus controleert u het resultaat met de exitcode. Na het zoeken naar de niet-bestaande naam pgdemo-zz gaf [echo $?] de waarde 1.
pgrep pgdemo-zzecho $?1Zonder enige voorwaarde uitgevoerd kwam de fout hieronder samen met exitcode 2. De man-pagina beschrijft de exitcodes als 0 (gevonden), 1 (niet gevonden), 2 (syntaxfout in de opdrachtregel) en 3 (fatale fout, zoals geheugentekort).
pgreppgrep: no matching criteria specified
Try `pgrep --help' for more information.echo $?2Gebruikt u deze exitcode in plaats van de uitvoer als voorwaarde, dan kan een script controleren of een proces draait. De versie ziet u met [pgrep -V]. De Debian 12-server had procps-ng 4.0.2 en de AlmaLinux 9.8-server procps-ng 3.3.
pgrep -Vpgrep from procps-ng 4.0.22️⃣ De optie pgrep -f en de uitvoer van -l en -a
Aan het nummer alleen ziet u niet welk proces het is, dus toont u met -l ook de naam en met -a de hele opdrachtregel.
pgrep -l pgdemo2143 pgdemo-a
2152 pgdemo-a
2155 pgdemo-bpgrep -a pgdemo2143 ./pgdemo-a 300
2152 ./pgdemo-a 301
2155 ./pgdemo-b 300De 300 en 301 aan het eind van de -a-uitvoer zijn de argumenten in seconden die aan sleep zijn meegegeven. Met deze argumenten onderscheidden we de twee pgdemo-a met dezelfde naam.
Met -f zoekt pgrep in de hele opdrachtregel in plaats van in de naam. Zoeken op pgdemo-a met -f verhoogde het aantal nummers van twee naar vier.
pgrep -f pgdemo-a2141
2143
2150
2152Met -a erbij bleek dat de twee extra regels de timeout-processen waren die pgdemo-a als argument hadden gekregen. Hun naam is timeout, maar hun opdrachtregel bevat pgdemo-a, dus voldeden ze aan de voorwaarde van -f.
pgrep -af pgdemo-a2141 timeout 300 ./pgdemo-a 300
2143 ./pgdemo-a 300
2150 timeout 300 ./pgdemo-a 301
2152 ./pgdemo-a 301Gebruikt u -f in een script, controleer dan of het script zelf in het resultaat verschijnt. pgrep neemt zichzelf nooit op in het resultaat, maar als de opdrachtregel van het script dat pgrep startte de zoektekst bevat, verschijnt dat script ook.
Bij het zoeken naar pgdemo-a met chk.sh, een script dat de ontvangen tekst ongewijzigd aan [pgrep -af] doorgeeft, kwam op de laatste regel het script zelf erbij: bash chk.sh pgdemo-a.
bash chk.sh pgdemo-a2141 timeout 300 ./pgdemo-a 300
2143 ./pgdemo-a 300
2150 timeout 300 ./pgdemo-a 301
2152 ./pgdemo-a 301
2160 bash chk.sh pgdemo-aHet patroon [p]gdemo-a, met de eerste letter tussen vierkante haken, vindt als reguliere expressie dezelfde tekst als pgdemo-a, maar in de opdrachtregel van het script staan de haken letterlijk, dus komt die niet meer overeen. Met dit patroon viel de scriptregel weg en bleven er maar vier regels over.
bash chk.sh '[p]gdemo-a'2141 timeout 300 ./pgdemo-a 300
2143 ./pgdemo-a 300
2150 timeout 300 ./pgdemo-a 301
2152 ./pgdemo-a 3013️⃣ Voorwaardeopties van pgrep
Met -x vindt pgrep alleen processen waarvan de hele naam overeenkomt, niet een deel. Met pgdemo kwam er niets uit, met pgdemo-a twee processen.
pgrep -x pgdemopgrep -lx pgdemo-a2143 pgdemo-a
2152 pgdemo-a-u selecteert processen op het account dat ze startte. Geeft u meerdere accounts op, gescheiden door komma's, dan vindt het alle processen van een van die accounts. De drie als root gestarte processen kwamen allemaal uit met [-u root], en met [-u daemon] kwam er geen.
pgrep -u root -l pgdemo2143 pgdemo-a
2152 pgdemo-a
2155 pgdemo-bpgrep -u daemon -l pgdemopgrep -u root,daemon -c pgdemo3Met een account dat niet bestaat kwam de fout [invalid user name] samen met exitcode 2.
pgrep -u no-such-user9 pgdemopgrep: invalid user name: no-such-user9Ook met een gewoon account op de Debian 12-server vonden we met dezelfde opties de ene sleep die onder dat account was gestart.
pgrep -u user1 -l sleep3047 sleeppgrep -u user1 -a sleep3047 sleep 60Als meerdere processen dezelfde naam hebben, toont -n alleen het laatst gestarte en -o alleen het eerst gestarte. Van twee pgdemo-a die met 2 seconden ertussen waren gestart, koos -n het latere en -o het eerdere.
pgrep -n pgdemo-a2152pgrep -o pgdemo-a2143Volgens de man-pagina kunnen -n en -o niet samen worden gebruikt. Met beide kwam alleen de gebruiksinstructie, zonder foutmelding.
-c toont het aantal in plaats van de nummers. Als er niets wordt gevonden, toont het 0 en was de exitcode 1.
pgrep -c pgdemo3pgrep -c pgdemo-zz0Hier volgt een overzicht van de opties van pgrep.
| Optie | Kopiëren | Uitleg |
|---|---|---|
| -f--full | In de hele opdrachtregel zoeken in plaats van in de naam | |
| -l--list-name | Naam samen met het nummer tonen | |
| -a--list-full | Hele opdrachtregel samen met het nummer tonen | |
| -x--exact | Alleen processen vinden waarvan de hele naam overeenkomt | |
| -u--euid | Alleen processen van het opgegeven account; bij meerdere gescheiden door komma's, een van die accounts | |
| -n--newest | Het laatst gestarte van de treffers | |
| -o--oldest | Het eerst gestarte van de treffers | |
| -c--count | Aantal tonen in plaats van nummers; exitcode 1 bij 0 | |
| -d--delimiter | Scheidingsteken tussen de nummers instellen (standaard een nieuwe regel) | |
| -V--version | Versie tonen |
| Optie | Kopiëren | Uitleg |
|---|---|---|
| -i--ignore-case | Zoeken zonder onderscheid tussen hoofd- en kleine letters | |
| -v--inverse | Processen vinden die niet overeenkomen | |
| -P--parent | Alleen kindprocessen van het opgegeven oudernummer (PPID) | |
| -t--terminal | Alleen processen die aan de opgegeven terminal hangen | |
| -g--pgroup | Alleen processen in het opgegeven procesgroepnummer | |
| -s--session | Alleen processen in het opgegeven sessienummer | |
| -U--uid | Alleen processen met dezelfde echte gebruikers-ID | |
| -G--group | Alleen processen met dezelfde echte groeps-ID | |
| -w--lightweight | Alle threadnummers tonen in plaats van procesnummers |
🔲 Simulator voor de pgrep-opdracht
De simulator hieronder begint met een lijst van de zes regels van pgdemo en timeout plus voorbeeldprocessen. Tik op de chips om in de lijst links te vergelijken welke regels elke optie vindt, en bekijk met [pgrep -l pgdemo] na [pkill pgdemo-b] hoe het resultaat kleiner wordt.
4️⃣ Verschil tussen pgrep, pidof en pkill
pidof vindt zonder reguliere expressies alleen processen waarvan de hele programmanaam overeenkomt, en toont de nummers op één regel, gescheiden door spaties. Zoeken op pgdemo-a toonde beide nummers op één regel, met 2152, het later gestarte, vooraan.
pidof pgdemo-a2152 2143Met de gedeeltelijke naam pgdemo vond pidof, anders dan pgrep, niets, en de exitcode was 1. Hebt u maar één nummer nodig, voeg dan -s toe. [pidof -s pgdemo-a] toonde alleen 2152.
pidof pgdemopidof -s pgdemo-a2152Om de starttijd en het oudernummer (PPID) van de gevonden nummers te zien, voegt u ze met pgrep -d samen met komma's en geeft u ze door aan -p van de ps-opdracht.
pgrep -d, pgdemo2143,2152,2155ps -fp $(pgrep -d, -x pgdemo-a)UID PID PPID C STIME TTY TIME CMD
root 2143 2141 0 15:59 ? 00:00:00 ./pgdemo-a 300
root 2152 2150 0 15:59 ? 00:00:00 ./pgdemo-a 3012141 en 2150 in de kolom PPID zijn de nummers van de timeout-processen die de twee pgdemo-a startten.
pkill zoekt processen met dezelfde voorwaarden als pgrep, maar stuurt ze een signaal in plaats van hun nummers te tonen. Zonder signaal stuurt het SIGTERM, en u kunt het signaal wijzigen zoals in [pkill -HUP naam].
pkill stuurt het signaal zodra het een treffer vindt, dus controleer de doelen eerst met [pgrep -a] of [pgrep -af] en dezelfde voorwaarden. Met -f worden ook timeout-processen of scripts waarvan de opdrachtregel dezelfde tekst bevat een doel. Als u het nummer al kent, gebruikt u de kill-opdracht om alleen naar dat nummer een signaal te sturen.
| Commando | Zoekt op | Uitvoer | Taak |
|---|---|---|---|
| pgrep | Deel van de naam (regex), met -f de hele opdrachtregel | Nummers; naam en opdrachtregel met -l, -a | Alleen zoeken |
| pidof | Hele programmanaam | Nummers op één regel | Alleen zoeken |
| pkill | Dezelfde voorwaarden als pgrep | Geen | Signaal naar de gevonden processen (standaard SIGTERM) |
🔢 FAQ & aanbevolen content
Realtime controleren
Linux top-commando (CPU- en geheugengebruik bekijken)
Opdracht die in realtime toont hoeveel CPU en geheugen elk proces gebruikt.
Geopende bestanden
[Linux] lsof-commando: informatie over gebruikte bestanden tonen
Opdracht die de bestanden toont die een proces open heeft, samen met de PID.
Taakbeheer
Achtergrond (Back Ground) en voorgrond (Fore Ground) in Linux: processen beheren
Manier van taakbeheer om een commando naar de achtergrond te sturen en weer naar de voorgrond te halen.
ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.