Ga naar hoofdinhoud

6.3 Processen

Hier bouw je op verder: De pipe en grep en Ctrl+C

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

Een programma dat draait, heet een proces. Elk proces krijgt een nummer, de PID (process id). Met dat nummer kun je het opzoeken en stoppen. ps laat de processen in deze zien:

ps
PID TTY TIME CMD
412 pts/0 00:00:00 bash
598 pts/0 00:00:00 ps

Twee processen: bash, de waarin je typt, en ps zelf. Bij jou zijn de nummers anders: Linux geeft ze uit op volgorde.

Alle processen​

ps aux laat alle processen op de computer zien, van alle gebruikers. Dat zijn er veel, dus zoek met grep. Open twee -vensters naast elkaar. Typ in het eerste:

sleep 1000

sleep doet duizend seconden niets, en houdt zo je terminal bezet. Zoek hem in het tweede venster:

pgrep -a sleep
734 sleep 1000

pgrep zoekt processen op naam en geeft de PID. Met -a zie je ook het hele .

Een proces stoppen​

Draait het in de terminal voor je neus, dan stop je het met Ctrl+C. Vanuit een ander venster gebruik je kill met de PID:

kill 734

In het eerste venster staat nu Terminated, en je kunt weer typen. Op naam kan ook: pkill sleep stopt elk proces dat sleep heet. Kijk daarom eerst met pgrep -a wat je raakt.

kill vraagt een proces netjes om te stoppen, zodat het nog kan opruimen. Luistert het niet, dan dwingt kill -9 het: dan stopt het meteen, zonder opruimen. Gebruik dat pas als het gewone kill niet werkt.

Live meekijken met top​

top laat elke paar seconden zien welke processen het meest van de processor en het geheugen gebruiken, met de drukste bovenaan. Stoppen doe je met q.

Voorspel​

Je zoekt sleep met ps aux | grep sleep, terwijl er één sleep draait. Hoeveel regels krijg je?

Klik hier als je het hebt geprobeerd

Twee:

sam 734 0.0 0.0 3144 2008 pts/0 S+ 10:15 0:00 sleep 1000
sam 801 0.0 0.0 4108 2156 pts/1 S+ 10:16 0:00 grep --color=auto sleep

grep sleep is zelf ook een proces, en in zijn commando staat het woord sleep. Wie de onderste PID gebruikt, stopt niets: dat proces is al klaar. pgrep heeft dat probleem niet.

Opdracht 6.3.a: stop het van buitenaf​

  1. Start in het ene venster sleep 1000.
  2. Zoek in het andere venster zijn PID.
  3. Stop het met kill, en kijk wat er in het eerste venster gebeurt.
Klik hier voor een tip

pgrep -a sleep geeft het nummer en het commando. Het nummer zet je achter kill.

Klik hier voor het antwoord
pgrep -a sleep
kill 734

Gebruik jouw eigen PID in plaats van 734. In het eerste venster verschijnt Terminated, gevolgd door een nieuwe .

Opdracht 6.3.b: wie is er druk?​

Het commando yes schrijft zo snel als het kan y op het scherm. Laat het in het ene venster draaien met yes > /dev/null: de gaat naar /dev/null, een put zonder bodem. Open top in het andere venster.

  1. Welk proces staat bovenaan, en hoeveel procent van de processor gebruikt het?
  2. Stop yes, en kijk of het uit top verdwijnt.
Klik hier voor een tip

De kolom %CPU zegt hoeveel van één processorkern een proces gebruikt. top sluit je met q, yes stop je met Ctrl+C.

Klik hier voor het antwoord
yes > /dev/null

yes staat bovenaan met bijna 100.0 bij %CPU: het gebruikt één kern helemaal. Na Ctrl+C in het eerste venster is het binnen een paar seconden uit top verdwenen.

Er gaat iets mis​

No such process​

bash: kill: (734) - No such process

Oorzaak: er draait geen proces met dat nummer. Het was al gestopt, of je typte de PID over van een oude uitvoer of van iemand anders.

Oplossing: zoek het opnieuw met pgrep -a. Het nummer is na elke start anders.

Operation not permitted​

bash: kill: (1) - Operation not permitted

Oorzaak: het proces is van een andere gebruiker, hier van root. Je mag alleen je eigen processen stoppen.

Oplossing: meestal is het niet jouw proces om te stoppen. Is het een , dan stop je hem met systemctl, in de volgende les: 6.4 Diensten.

De terminal reageert niet meer​

Oorzaak: er draait nog een programma, zoals sleep, yes of top. Zolang dat loopt, gaat wat je typt naar dat programma en niet naar bash.

Oplossing: druk op Ctrl+C. Werkt dat niet, probeer dan q: daarmee sluit je top en man.

Door naar 6.4 Diensten.