Een Linux systeem bestaat uit processen, wat in principe programma's zijn die op een systeem draaien.
Processen moeten echter vaak beheerd worden, wat op verschillende manieren kan gebeuren, zoals opsporen, stoppen, starten en afsluiten.
Er zijn momenten dat we de naam van een proces niet weten, maar wel zijn proces-ID of andersom.
We kunnen verschillende opdrachten gebruiken om met deze situaties om te gaan.
Misschien ken je de grep opdracht, deze wordt gebruikt om een woord of tekstfragment te vinden in een gegeven stuk tekst of bestand.
De pgrep opdracht werkt op dezelfde manier, maar is ontworpen om met processen te werken. Het kan de proces-ID's vinden op basis van een gegeven voorwaarde, bijvoorbeeld een gebruikersnaam. We kunnen ook de procesnaam opgeven als parameter om naar te zoeken.
Laten we een voorbeeld nemen. We zullen de pgrep opdracht gebruiken met een procesnaam om alle bijbehorende proces ID's weer te geven. Om dit te doen, voeren we de volgende opdracht uit:
dany@pindabook:~$ pgrep bash
1499
In deze opdracht geven we de procesnaam door als parameter. Laten we eens kijken naar de uitvoer, die één proces-ID weergeeft.
Laten we eens kijken wat er gebeurt als we de opdracht uitvoeren met een procesnaam die niet bestaat. We proberen dit uit met httpd als procesnaam:
dany@pindabook:~$ pgrep httpd
Merk op dat er geen uitvoer wordt geretourneerd. Dit betekent dat dit proces niet bestaat.
We voeren nu de bash opdracht uit om bash nog een keer te starten. We zouden nu twee bash-gerelateerde proces-ID's moeten hebben. Om bash nogmaals te starten, voeren we de volgende opdracht uit:
dany@pindabook:~$ bash
Daarna voeren we opnieuw de volgende opdracht uit om de proces-ID's voor bash te controleren:
dany@pindabook:~$ pgrep bash
1499
1741
Merk op dat de uitvoer op afzonderlijke regels wordt weergegeven.
We kunnen de uitvoer op een enkele regel weergeven door elk proces-ID te scheiden met een spatie. Hiervoor moeten we de parameter -d (--delimiter) gebruiken. We moeten de volgende opdracht uitvoeren:
dany@pindabook:~$ pgrep bash -d' '
1499 1741
Bij gebruik van de -d parameter wordt de uitvoer weergegeven op een enkele regel waar een spatie elk proces-ID scheidt. Dit is wat we hadden gedefinieerd als de criteria na de -d parameter.
Wat moeten we doen als we de procesnaam en zijn ID willen weergeven in de uitvoer? We moeten de -l (--list-name) parameter gebruiken.
dany@pindabook:~$ pgrep bash -l
1499 bash
1741 bash
Merk op dat de uitvoer bij elk proces-ID de procesnaam (bash) weergeeft.
We kunnen ook de proces-ID's weergeven van de processen die door een specifieke gebruiker worden uitgevoerd. We kunnen bijvoorbeeld de proces-ID's van de processen voor de gebruiker dany weergeven. We moeten de -u (--euid) parameter gebruiken om de gebruikersnaam te vermelden.
dany@pindabook:~$ pgrep -u dany
870
882
883
...
1499
1741
2124
Een volledige lijst van alle proces-ID's wordt weergegeven in de uitvoer.
We zullen nu twee gebruikersnamen gebruiken, dany en root, en proces-ID's weergeven. Om dit te doen, moeten we beide gebruikersnamen scheiden met een komma, maar we moeten wel de -u parameter gebruiken:
dany@pindabook:~$ pgrep -u dany,root
1
2
3
...
1499
1741
2146
Een volledige lijst van alle proces-ID's wordt weergegeven in de uitvoer.
Laten we aannemen dat we het meest recente proces willen vinden dat gestart is door de gebruiker dany. Om dit te kunnen doen, moeten we -lnu als parameter gebruiken:
dany@pindabook:~$ pgrep -lnu dany
2159 sleep
De uitvoer wordt weergegeven. De beschrijving van de -lnu parameter is als volgt:
Soms is het interessant om te weten hoeveel processen draaien voor een specifieke gebruiker. Om dit te doen, moeten we de volgende opdracht uitvoeren met de -c (--count) parameter:
dany@pindabook:~$ pgrep -c -u dany
40
De -c parameter telt het aantal processen. Het toont niet de lijst met processen, maar alleen het totale aantal processen voor een specifieke gebruiker.
We hebben verschillende parameters van de pgrep opdracht gezien. Om meer informatie over deze opdracht te krijgen, kunnen we de volgende opdracht uitvoeren met de parameter --help:
dany@pindabook:~$pgrep --help
Usage: pgrep [options]Options: -d, --delimiter specify output delimiter -l, --list-name list PID and process name -a, --list-full list PID and full command line -v, --inverse negates the matching -w, --lightweight list all TID -c, --count count of matching processes -f, --full use full process name to match -g, --pgroup match listed process group IDs -G, --group match real group IDs -i, --ignore-case match case insensitively -n, --newest select most recently started -o, --oldest select least recently started -O, --older select where older than seconds -P, --parent match only child processes of the given parent -s, --session match session IDs -t, --terminal match by controlling terminal -u, --euid match by effective IDs -U, --uid match by real IDs -x, --exact match exactly with the command name -F, --pidfile read PIDs from file -L, --logpidfile fail if PID file is not locked -r, --runstates match runstates [D,S,Z,...] -A, --ignore-ancestors exclude our ancestors from results --cgroup match by cgroup v2 names --ns match the processes that belong to the same namespace as --nslist list which namespaces will be considered for the --ns option. Available namespaces: ipc, mnt, net, pid, user, uts -h, --help display this help and exit -V, --version output version information and exit For more details see pgrep(1).
De uitvoer toont een lijst van parameters met hun beschrijvingen. We kunnen parameters mixen en matchen om onze voorwaarden te verfijnen bij het uitvoeren van de pgrep opdracht.
Je bent misschien gewoon om een proces af te breken met de kill opdracht. We kunnen echter de pkill opdracht gebruiken om dezelfde taak uit te voeren. Het enige verschil is dat de pkill opdracht alleen werkt met de procesnamen en niet met de proces-ID's.
Voor demo-doeleinden starten we (nogmaals) Konsole vanaf de opdrachtregel. Hiervoor voeren we de volgende opdracht uit:
dany@pindabook:~$ konsole
kf.xmlgui: Shortcut for action "" "Snelle commando's tonen" set with QAction::setShortcut()! Use KActionCollection::setDefaultShortcut(s) instead.
kf.xmlgui: Shortcut for action "" "SSH-beheerder tonen" set with QAction::setShortcut()! Use KActionCollection::setDefaultShortcut(s) instead.
Konsole wordt onmiddellijk gestart.
We werken verder in de pas gestarte Konsole, de opdrachtregel waar we konsole mee gestart hebben is immers nog bezig met het uitvoeren van konsole.
In het nieuwe terminalvenster voeren we de pkill opdracht uit om konsole af te breken.
dany@pindabook:~$ pkill konsole
Merk op dat er geen uitvoer wordt geretourneerd en dat de opdracht succesvol is uitgevoerd. Alle Konsole terminalvenster werden afgesloten.
Net als bij pgrep kun je ook hulp krijgen bij pkill met de volgende opdracht:
dany@pindabook:~$pkill --help
Usage: pkill [options]Options: - , --signal signal to send (either number or name) -q, --queue integer value to be sent with the signal -e, --echo display what is killed -c, --count count of matching processes -f, --full use full process name to match -g, --pgroup match listed process group IDs -G, --group match real group IDs -i, --ignore-case match case insensitively -n, --newest select most recently started -o, --oldest select least recently started -O, --older select where older than seconds -P, --parent match only child processes of the given parent -s, --session match session IDs -t, --terminal match by controlling terminal -u, --euid match by effective IDs -U, --uid match by real IDs -x, --exact match exactly with the command name -F, --pidfile read PIDs from file -L, --logpidfile fail if PID file is not locked -r, --runstates match runstates [D,S,Z,...] -A, --ignore-ancestors exclude our ancestors from results --cgroup match by cgroup v2 names --ns match the processes that belong to the same namespace as --nslist list which namespaces will be considered for the --ns option. Available namespaces: ipc, mnt, net, pid, user, uts -h, --help display this help and exit -V, --version output version information and exit For more details see pgrep(1).