Jako testeři softwaru někdy potřebujeme vědět, jak proces zombie vypadá v našem systému. Můžeme na něm spouštět různé testy, pokud konkrétně víme, který program a ID procesu je přidružen k tomuto zombie procesu.
Co je to zombie proces?
Zombie nebo zaniklý proces v Linuxu je proces, který byl dokončen, ale jeho záznam stále zůstává v tabulce procesů kvůli nedostatečné shodě mezi nadřazeným a podřízeným procesem. Nadřazený proces obvykle kontroluje stav svých podřízených procesů pomocí funkce wait(). Po dokončení podřízeného procesu funkce čekání signalizuje rodiči, aby zcela opustil proces z paměti. Pokud však rodič nedokáže zavolat funkci čekání pro některého ze svých potomků, podřízený proces zůstane v systému živý jako mrtvý nebo zombie proces. Tyto zombie procesy se mohou nahromadit ve velkém množství ve vašem systému a ovlivnit jeho výkon.
Když spustíte příkaz top a běží zombie, bude to označeno na druhém řádku výstupu následovně:
Pokud však ve vašem systému neběží žádný proces zombie, můžete vytvořit figurínu pro účely testování, jak je popsáno v tomto článku. Tento proces spouštíme na Ubuntu 18.04.
Vytvoření zombie procesu
V této části napíšeme program c pro spuštění procesu zombie v našem systému.
Otevřete textový editor a zadejte následující kód:
Kód
#include <stdlib.h> #include <sys/types.h> #include <unistd.h>int main () { pid_t child_pid;child_pid = fork (); if (child_pid > 0) { sleep (60); } else { exit (0); } return 0; }
Uložte tento soubor jako zombie.c
Proces zombie vytvořený tímto kódem poběží 60 sekund. Dobu trvání můžete prodloužit zadáním času (v sekundách) ve funkci sleep().
Otevřete Terminál a spusťte následující příkaz pro kompilaci tohoto programu:
$ cc zombie.c -o zombie
Nyní bude vytvořen spustitelný soubor se jménem zombie.
Vezměte prosím na vědomí, že budete muset nainstalovat kompilátor GNU C, pokud ještě není nainstalován ve vašem systému pomocí následujícího příkazu:
$ sudo apt-get install build-essential
Nyní spusťte zombie program pomocí následujícího příkazu:
./zombie
Uvidíte následující výstup:
Během testování můžete použít ID nadřazeného procesu (PPID) a ID podřízeného procesu (PID); například zabitím tohoto zombie procesu pomocí příkazu kill.
Zatímco tento proces běží, můžete zobrazit výkon systému v jiném okně terminálu pomocí příkazu top. Na druhém řádku výstupu uvidíte 1 proces zombie.
Příkaz ps nyní také zobrazí tento zaniklý proces a zombie program, který je za něj zodpovědný:
$ ps axo stat,ppid,pid,comm | grep -w defunct
Tento příkaz vám dá stav, parentID, ID procesu, program, který spouští proces zombie (program zombie, který jsme spustili v tomto tutoriálu).
Nyní jste se naučili, jak vytvořit jednoduchý fiktivní zombie proces. To vám dá představu o tom, jak to vypadá ve vašem systému a jak jej můžete použít pro účely testování.