1 Parent en Child relaties
Het begint allemaal bij de kernel die het allereerste proces op de computer activeert. Dit proces heeft de naam 'init' en heeft altijd het proces ID (PID) 1. Init is ervoor verantwoordelijk dat de andere processen gestart worden. Het proces 'init' doet dat door een techniek die bekend staat als forking: eenvoudig gezegd komt het erop neer dat een proces zichzelf copieert en in de copy van zichzelf een nieuw proces start. Op deze wijze ontstaat een parent-child-relatie waarbij het child proces altijd afhankelijk is van het parent-proces en het de taak is van de parent om het child in de gaten te houden.
Het is mogelijk een ander proces te laten starten met PID 1, maar dat is alleen nuttig voor troubleshooting.
In dat geval geeft men op de prompt van de bootloader bijvoorbeeld de optie init=/bin/bash mee; dit zorgt ervoor
dat bash gestart wordt met PID 1.
Onder normale omstandigheden zal het child-proces wanneer het klaar is een signaal terugsturen naar het parent-proces. Hierin verteld het child proces op welke wijze het is afgesloten. Als het succesvol was, stuurt het child proces een exit-code 0 naar de parent, was het child proces niet succes vol dan wordt een andere exit-code naar het parent proces gestuurd. Dit kan exit-code 1 zijn, maar ook elke willekeurige andere exit-code. Welke code gebruikt wordt, wordt ingevuld door de programmeur van de betreffende opdracht en staat dus op voorhand niet vast. Als het parent proces de shell was en het child-proces een opdracht die vanuit de shell is uitgevoerd, kan de exit-status van het laatste child-proces worden opgevraagd met de opdracht echo $? |
![]() |
Als beheerder van een systeem is het belangrijk dat men kan achterhalen hoe de relatie tussen parent- en child- processen is opgebouwd. Hiervoor zijn er enkele opties beschikbaar. De meest directe manier is te kijken naar de proces status in het pseudo-filesystem /proc. In deze directory bestaat een subdirectory voor elk actief proces. De naam van deze subdirectory komt overeen met de PID van het process. In deze subdirectory bestaat er een bestand genaamd 'status'. Hierin wordt alle relevante informatie over het proces bijgehouden, zo ook de PPID, ofwel de PID van het parent-proces. |
![]() |
Naast de mogelijkheid om voor elk individueel proces de status uit te lezen, zijn er ook een 2-tal opdrachten waarmee men de hiërarchische relatie tussen parent en child proces kan tonen. Een van de mogelijkheden is gebruik maken van de opdracht pstree, als een alternatief met iets meer mogelijkheden om de uitvoer te filteren is er de opdracht ps met de f (forest), al dan niet in combinatie met andere opties. De opdracht ps afx geeft bijvoorbeeld een lijst van alle processen waarin uitstekend de relaties tussen parent en child processen duidelijk wordt. Met de opdracht ps kan men niet goed duidelijk maken dat alle processen voortkomen uit het init process, hiervoor kan men beter pstree gebruiken. De volgende screen-shot is een uitreksel van een ps afx scherm. |
![]() |