Als softwaretesters moeten we soms weten hoe een zombieproces eruitziet op ons systeem. We kunnen er verschillende tests op uitvoeren als we specifiek weten welk programma en proces-ID aan dat zombieproces is gekoppeld.
Wat is een zombieproces??
Een zombie of een ter ziele gegane proces in Linux is een proces dat is voltooid, maar de invoer blijft nog steeds in de procestabel vanwege gebrek aan overeenstemming tussen de bovenliggende en onderliggende processen. Gewoonlijk houdt een bovenliggend proces de status van zijn onderliggende processen in de gaten via de functie wait(). Wanneer het onderliggende proces is voltooid, geeft de wachtfunctie de ouder een signaal om het proces volledig uit het geheugen te verlaten. Als de ouder echter de wachtfunctie voor een van zijn kinderen niet aanroept, blijft het onderliggende proces in het systeem levend als een dood- of zombieproces. Deze zombieprocessen kunnen zich in grote aantallen op uw systeem ophopen en de prestaties beïnvloeden.
Wanneer u de opdracht top uitvoert en er is een zombie actief, wordt dit als volgt aangegeven door de tweede regel van de uitvoer:
Als er echter geen zombieproces op uw systeem draait, kunt u een dummy maken voor testdoeleinden zoals beschreven in dit artikel. We voeren dit proces uit op Ubuntu 18.04.
Een zombie-proces creëren
In deze sectie zullen we een c-programma schrijven om een zombieproces op ons systeem uit te voeren.
Open een teksteditor en voer de volgende code in:
Code
#include#include #include int main () pid_t child_pid;child_pid = fork (); if (child_pid > 0) slaap (60); anders afsluiten (0); retourneer 0;
Sla dit bestand op als zombie.c
Het zombieproces dat met deze code is gemaakt, duurt 60 seconden. U kunt de tijdsduur verlengen door een tijd (in seconden) op te geven in de slaap()-functie.
Open de Terminal en voer de volgende opdracht uit om dit programma te compileren:
$ cc zombie.c -o zombie
Nu wordt een uitvoerbaar bestand met de naam zombie gemaakt.
Houd er rekening mee dat u de GNU C-compiler moet installeren als deze nog niet op uw systeem is geïnstalleerd via de volgende opdracht:
$ sudo apt-get install build-essentieel
Voer nu het zombieprogramma uit via de volgende opdracht:
./zombie
U ziet de volgende uitvoer:
U kunt tijdens het testen de bovenliggende proces-ID (PPID) en de onderliggende proces-ID (PID) gebruiken; bijvoorbeeld door dit zombieproces te doden via het kill-commando.
Terwijl dit proces wordt uitgevoerd, kunt u de systeemprestaties in een ander Terminal-venster bekijken via de opdracht top. Je zult in staat zijn om 1 zombieproces te zien via de tweede regel van de uitvoer.
Het ps-commando toont nu ook dit ter ziele gegane proces en het zombieprogramma dat ervoor verantwoordelijk is:
$ ps axo stat,ppid,pid,comm | grep -w opgeheven
Deze opdracht geeft je de staat, parentID, de proces-ID, het programma dat het zombieproces uitvoert (het zombieprogramma dat we in deze tutorial hebben uitgevoerd).
Je hebt nu geleerd hoe je een eenvoudig dummy-zombieproces maakt. Dit geeft u een idee van hoe het eruitziet op uw systeem en hoe u het kunt gebruiken voor testdoeleinden.