Les 4b processen
Paul Wiegmans (paul@bonhoeffer.nl)
laatst gewijzigd
Inhoud: ps, kill, jobs, nice, top, renice, xeyes, &
Intro
Om procesbeheer goed te begrijpen kunnen we het beste een proces
aanschouwelijk maken. Benodigd is een Linux systeem met X draaiend en
het programma xeyes.
Xeyes
Vanaf de shellprompt starten we
xeyes -center red
Het xeyes venster wordt zichtbaar en het reageert als we de muiscursor
bewegen. We hebben een nieuwe process gestart. Je merkt dat je geen
nieuwe prompt krijgt in het terminalvenster.
Een process stoppen
We kunnen nu xeyes simpel stoppen. Druk op Control-C
^C
De prompt is weer zichtbaar. We hebben het proces afgebroken.
Control-C wordt ook vaak genoteerd als Ctrl-C of ^C.
Het xeyes venster is nu ook verdwenen. Als we xeyes weer starten
xeyes -center red
dan kunnen we het proces ook stoppen. Dit bereiken we door op
Control-Z te drukken.
^Z
We zien nu de prompt weer terug en het xeyes venster blijft zichtbaar.
Maar als we de muis bewegen zien we xeyes niet reageren. En als xeyes
venster bedekt wordt door een ander venster en het bedekkende venster
verdwijnt dan wordt het xeyes venster niet meer opnieuw opgebouwd. Het
proces doet nu helemaal niets meer. Het proces is zogezegd gestopt. Je zou
ook kunnen zeggen dat het proces slaapt.
fg en bg
Om een process van de toestand gestopt naar de toestand draaiend te
krijgen, kunnen we het in de voorgrond uitvoeren met het commando fg.
Voer fg uit
fg
Het xeyes venster reageert nu weer en de prompt maar de prompt is niet
meer zichtbaar. We kunnen nu xeyes weer stoppen met Control-Z
^Z
We kunnen het xeyes process nu ook in de achtergrond laten draaien. Dit
doe je met het commando bg.
bg
Nu is xeyes zichtbaar en reageert en
we hebben de prompt ook weer terug.
Gebruik van &
In het voorgaande hebben we een nieuwe proces gestart met het programma
xeyes, en we hebben dit process gestopt, en vervolgens in de
achtergrond verder laten draaien. Om de voorgaande handeling te kunnen
verrichten met een enkele gebruiken we het teken & achter de
commandoregel om direct een process in de achtergrond te starten. Bijv
[paul@localhost paul]$ xeyes -center blue &
[2] 2723
Als resultaat hiervan geeft de shell jou tussen de blokhaken het
jobnummer en daarachter het PID-nummer. Het jobnummer laat zien dat dit
het tweede process is dat in deze shell is gestart. Het PID is het proces identification number van
het zojuist gestarte process en dit is een nummer dat het proces uniek
identificeert. Het is een 16-bits getal en dat betekent dat het aantal
gelijktijdig uitgevoerde processen is begrensd tot een maximum aantal
van 65536.
Jobs
We hebben nu twee in de achtergrond draaiende processen. Met het
commando jobs kunnen we deze processen in een lijstje te zien krijgen
[paul@localhost paul]$ jobs
[1]-
Running
xeyes -center red &
[2]+
Running
xeyes -center blue &
in de eerste kolom zien we het jobnummer, en daarachter de toestand van
het proces. Het commando jobs -l geeft bovendien de PID van elk proces.
[paul@localhost paul]$ jobs -l
[1]- 2721
Running
xeyes -center red &
[2]+ 2723
Running
xeyes -center blue &
De plus achter het job nummer geeft aan welke proces de 'aktuele
job' is, d.w.z. de job die in de voorgrond zal worden uitgevoerd
wanneer je fg uitvoert.
Een lijst van processen
Het is duidelijk door de voorgaande demonstratie dat Linux echt een
multitasking besturingssysteem is. Er zijn op elk moment vele processen
tegelijk aktief . Om zelf aktief te kunnen zijn met procesbeheer is het
belangrijk om te weten welke processen er op elk moment aktief zijn,
van welke gebruiker ze zijn, hoeveel belasting ze leggen op de
processor, hoeveel geheugen ze gebruiken en meer. Het commando ps
("process list") geeft je een lijst met aktieve processen. Als je het
probeert
ps
dan ziet de uitvoer er ongeveer zo uit:
[paul@localhost paul]$ ps
PID TTY TIME CMD
2176 pts1 00:00:00 bash
2721 pts1 00:00:00 xeyes
2723 pts1 00:00:00 xeyes
2769 pts1 00:00:00 ps
Je ziet nu alleen de processen die van jou zijn, en die in deze shell
gestart. Als laatste in de rij is het proces ps te zien, en dat is
natuurlijk het hier uitgevoerde commando.
Om alle processen te zien, inclusief de processen buiten deze shell en
buiten deze gebruiker, gebruik je
ps ax
Dit laat je zien welke processen allemaal draaien, en hier zie je ook
de systeemdiensten of systeemservices
, zoals bijvoorbeeld webservers en andere processen die een functies
verrichten en vaak aangeduid worden met de term deamons . Uiteraard kun je meer
opties van ps te weten komen, met man ps .
Kill
Een van de belangrijkste gegevens die we kunnen krijgen met het ps
commando is het PID van elk proces. Met deze PID kunnen we een process
stoppen. Dit gaat met het commando kill. Het commando kill wordt
meestal gebruikt in deze vorm
kill pid
waarbij pid het PID van een process is. Dit zorgt er voor dat het
process wordt afgebroken op een redelijk nette manier.
Wat we eigenlijk doen met kill is een signaal sturen naar een proces.
Er zijn een aantal verschillende signalen, en dat is precies wat
Control-C en Control-Z bewerkstelligen. De signalen die je met
Control-C en Control-Z stuurt naar een process kun je ook sturen met
behulp van het commando kill en het PID van het process . Het commando
kill -s SIGSTOP 2723
stopt bijvoorbeeld xeyes met de blauwe ogen op de computer. Hier is
toevallig 2723 het PID van het xeyes process. Het PID is uiteraard
anders op elke computer. Gebruik jobs -l of
ps
om het PID te weten te komen van een bepaald process. Met het commando
kill -s SIGKILL 2721
wordt xeyes met de rode ogen afgebroken. het is hetzelfde als Control-C
drukken wanneer deze taak in de voorgrond wordt uitgevoerd. De
voornaamste taak van kill is het kunnen stoppen van processen die niet
meer reageren op het toetsenbord. Zolang je de eigenaar bent van een
proces kun je hiermee elk proces stoppen. Je krijgt meer informatie
over kill als je uitvoert: man kill
.
Top
Een tweede commando om processen te zien in real-time is top.
Dit commando tovert een voortdurend bijgewerkt overzicht van aktieve
processen. Top sorteert bovendien deze lijst en zet de processen die de
meeste processortijd gebruiken bovenaan. Je krijgt hiermee zeer snel
een idee wat het "belangrijkste" is dat je computer aan het doen
is. Je krijgt meer informatie over top als je op de prompt
uitvoert: man top .
Opdracht
Probeer de volgende handelingen zelf uit:
- Start xeyes
- Stop xeyes
- onderbreek xeyes
- laat xeyes in de achtergrond draaien
- laat xeyes in de voorgrond draaien
- laat xeyes weer in de achtergrond draaien, en vraagt vervolgens
een lijst met processen op, die in de aktuele shell gestart zijn.
- Bekijk met top welk proces het meeste processortijd in beslag
neemt.