next up previous contents index
Volgende: 6.11 Printen Omhoog: 6 Basiskennis Vorige: 6.9 Geheugenbeheer   Inhoudsopgave   Index


6.10 Processen

Een programma kan meerdere keren gestart worden. Elke gestarte versie is een losstaand proces. Verschillende gebruikers kunnen zo tegelijk hetzelfde programma gebruiken, zonder ook maar iets van elkaar te merken. Als een programma multi-threaded is, zal elke thread een eigen PID hebben. (Linux heeft geen POSIX-threads, waarbij alle threads binnen hetzelfde proces lopen.) Een voorbeeld van zo'n programma is xmms.

Wil je dat een programma in de achtergrond wordt uitgevoerd, zet dan een &-teken achter de naam van het programma. Op die manier zorg je ervoor dat een console of terminal niet in beslag genomen wordt. Heb je een programma al in de voorgrond gestart (dus geen &-teken gebruikt), dan kun je hem naar de achtergrond verplaatsen door op ctrl-z te drukken en vervolgens bg in te tikken. Om het vervolgens weer naar de voorgrond te verplaatsen kun je fg gebruiken. Een programma voor X kan dan nog wel meldingen in de terminal laten zien. Wil je die meldingen per se weghebben, gebruik dan programmanaam &$>$ /dev/null &. Start je een programma vanuit een menu van je window manager, dan zullen de meldingen in de console verschijnen van waaruit je X gestart hebt.

Een PID is een Process ID. Elk proces dat bezig is, heeft een eigen nummer. Met ps aux krijg je compleet overzicht van draaiende processen. Het commando pidof proces, waarin je proces vervangt door de naam van het programma, geeft de PID van dat proces. Als je de naam niet exact weet, kun je ook ps aux $\vert$ grep stuknaam gebruiken.

Met het hulpprogramma top krijg je ook een overzicht van op dit moment aktieve processen. Je ziet daarbij ook hun processor- en geheugenverbruik. Het is handig dit in een terminal in X te starten, zodat er veel in beeld past.

Een zombie is een proces dat overleden is maar dat nog niet heeft doorgegeven aan z'n parent. Het gebruikt geen CPU of geheugen meer, maar staan nog wel in de process table. Ze verdwijnen als je hun parent killt.

Je kunt een proces meer CPU-tijd geven met renice n pid. Als je voor n -20 invult krijg het proces de hoogst mogelijke prioriteit, met 0 normale en met 20 de laagst mogelijke. Een normale gebruiker mag alleen positieve getallen gebruiken (dus vertragen). Alleen root mag ook negatieve getallen gebruiken.

Je kunt een programma dat niet reageert afsluiten met kill pid, waarin je pid vervangt door de PID van het process dat je wilt killen. Je kunt ook killall naam gebruiken. Daarbij moet je niet de PID invullen, maar de naam van het proces. Je kunt een programma in X vrij letterlijk afschieten door xkill te starten en vervolgens het gewenste venster aan te klikken. In top kun je een proces killen door op k te drukken en vervolgens de PID in te tikken.

Je kunt het kill-commando verschillende signalen laten sturen. Tik man 7 signal voor een compleet overzicht. Met -9 wordt het proces absoluut afgebroken door de kernel. Het is geen nette manier om processen te stoppen. Het programma krijgt dan geen tijd meer om lock files te verwijderen en shared memory vrij te geven. Wil het programma echt niet weg, dan is dit de definitieve oplossing. Werkt dit zelf niet, dan werkt niks (dat kan voorkomen, maar is zeldzaam)! Met -15 wordt vriendelijk aan het proces verzocht of hij wil stoppen. Een goed programma roept dan de exit-procedure aan en sluit netjes af. Dit signaal wordt gestuurd als je niet opgeeft welke er gestuurd moet worden. Shells en deamons kun je herstarten met een de optie -1 of -HUP. Dit is het zogenaamde SIGHUP-signaal. Dit signaal zegt dat de gebruiker de lijn opgehangen heeft (uit de modemtijd).

Als je een proces hebt gestart vanuit een terminal, dan zal dat proces worden afgebroken als je die terminal sluit. Om dat te voorkomen moet je het programma starten met nohup prog &. De output van het programma wordt dan naar het bestand nohup.out in de huidige directory gestuurd.

Het volgende script heb ik in het verleden talloze keren kunnen gebruiken om het Linux-programma met een recordaantal bugs te killen: Netscape.

#!/bin/sh
# Gebruik de backquote links naast de 1 op het toetsenbord bij de volgende regel!
kill -12 `pidof netscape-communicator`
# of als dat niet werkt:
# killall netscape-communicator
# of als ook dat niet wil werken:
# kill -9 `ls -l .netscape/lock | cut -d: -f 3`

# Haal de lock file van Netscape weg
rm -f ~/.netscape/lock

Het commando uptime zegt naast hoe lang je computer al aan staat ook ruwweg hoeveel processen de processor graag compleet bezet zouden houden. Het is een pseudo-meetmethode van de belasting van je systeem. Als 2 processen 100% willen, is de load 2. Als 3 prosessen elk 25% CPU-tijd willen is de load 0.75. Uptime geeft de load voor de afgelopen 1, 5, en 15 minuten weer.


next up previous contents index
Volgende: 6.11 Printen Omhoog: 6 Basiskennis Vorige: 6.9 Geheugenbeheer   Inhoudsopgave   Index
Jarkko Huijts 2002-08-17