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:
  1. Start xeyes
  2. Stop xeyes
  3. onderbreek xeyes
  4. laat xeyes in de achtergrond draaien
  5. laat xeyes in de voorgrond draaien
  6. laat xeyes weer in de achtergrond draaien, en vraagt vervolgens een lijst met processen op, die in de aktuele shell gestart zijn.
  7. Bekijk met top welk proces het meeste processortijd in beslag neemt.