Processen

Een programma in uitvoering noemen we een process. Een process bevindt zich in virtueel geheugen (het echte werkgeheugen of de swapspace). Elk process dat iets kan doen krijgt een tijdje de CPU voor zichzelf. We noemen dit een timeslice. De timeslices zijn relatief kort. Elke keer houdt de CPU zich even met een zeker process bezig. Het lijkt alsof er meer processen teglijk actief zijn. In een systeem met meer CPU's kunnen er ook echt twee of meer processen tegelijk actief zijn. Maar de meeste PC's zijn tot op heden gebaseerd op een enkele CPU.

Opkomst en ondergang van processen

Een process wordt actief (een programma wordt gestart) en komt vaak na enige tijd weer aan zijn eind. In unix/linux ontstaan processen uit een ander process. Een process kan met een fork-system call zichzelf in tweeen splitsen. De ene helft (het orgineel) heet de parent, het nieuwe process heet de child. Laten we eens kijken wat dit in de praktijk betekent. We tikken in onze command interpreter (bash onder linux) het commando ls in:

ls

De command interpreter bash maakt een kopie van zichzelf en het child-gedeelte zal het ls commando daadwerkelijk gaan uitvoeren. Na uitvoering doet dit programma een exit en houdt op te bestaan. De exit code van ls wordt echter door linux nog bewaard voor de parent. De parent kan deze code opvragen met de wait system call. Pas dan worden alle overblijfselen van het child process afgevoerd. Op het eerste gezicht is het wellicht niet duidelijk wat deze aanpak voor nut heeft, maar bij scripting zullen we zien dat de exit code gebruikt kan worden om te kijken of een process zijn werk naar behoren heeft gedaan.
Een process kan dus een nieuw process maken. Er moet wel een eerste process zijn. Dit process heet init een heeft process-nummer (PID of process-ID) 1. Elk process heeft een eigen uniek nummer. Een nieuw process krijgt een nieuw nummer (PID). Oude vrijgegeven PID's kunnen later opnieuw gebruikt worden. Meestal duurt dat een tijdje tot een zeker reeks doorlopen is.
Een process dat al een exit heeft gedaan en dus feitelijk 'dood' is, maar waarvan de exit-code nog niet is opgevraagd neemt dus nog wat ruimte in het operating system in (om precies te zijn in de process-table). Zo'n dood process heet een zombie. Ook kan het gebeuren dat het parentprocess een exit doet voor het childprocess aan zijn eind komt. In dat geval hebben we te maken met een orphan (weesje). Zo'n orphan dreigt zelf een zombie te worden omdat er geen parentprocess de exitcode zal opvragen. Gelukkig is hierin voorzien en zal bij overlijden van een parentprocess het eventuele childprocess (of meerdere childprocessen) door init geadopteerd worden.

Signalen voor processen

Het is mogelijk een signal naar een process te sturen. Hiervoor kennen we het commando kill. Een commandoregel ziet er bijvoorbeeld als volgt uit:

kill 1352

We sturen een signal naar processnummer (PID) 1352 Een process kan dat signal eventueel met een speciaal daarvoor geschreven stuk software verwerken (een signal handler), maar is hierin niet in voorzien dan zal het process een exit doen met ander woorden, ophouden te bestaan. Wil men een process echt weghebben dan is er een speciaal signal (KILL) dat ook met het killcommando mee te geven is (KILL is signal 9):

kill -9 1352

Zal process nummer 1352 uit de wereld helpen. Let op: je kunt alleen je eigen processen killen. Als superuser kun je ook andermans processen afschieten.


Aangemaakt 31 mei 2000
Laatst bijgewerkt januari 2016