Ricerca nel sito web

Come creare un processo Zombie fittizio in Ubuntu 18.04 LTS


Come tester del software, a volte abbiamo bisogno di sapere come appare un processo zombie sul nostro sistema. Possiamo eseguire vari test su di esso se sappiamo nello specifico quale programma e ID processo sono associati a quel processo zombie.

Cos'è un processo Zombie?

Uno zombie o un processo defunto in Linux è un processo che è stato completato, ma la sua voce rimane ancora nella tabella dei processi a causa della mancanza di corrispondenza tra i processi genitore e figlio. Di solito, un processo genitore controlla lo stato dei suoi processi figli attraverso la funzione wait(). Quando il processo figlio ha terminato, la funzione wait segnala al genitore di uscire completamente dal processo dalla memoria. Tuttavia, se il genitore non riesce a chiamare la funzione wait per uno qualsiasi dei suoi figli, il processo figlio rimane vivo nel sistema come processo morto o zombie. Questi processi zombie potrebbero accumularsi, in gran numero, sul tuo sistema e influenzarne le prestazioni.

Quando esegui il comando top e uno zombie è in esecuzione, verrà indicato dalla seconda riga dell'output come segue:

Tuttavia, se sul tuo sistema non è in esecuzione alcun processo zombie, puoi creare un manichino a scopo di test come descritto in questo articolo. Stiamo eseguendo questo processo su Ubuntu 18.04.

Creazione di un processo Zombie

In questa sezione scriveremo un programma C per eseguire un processo zombie sul nostro sistema.

Apri un editor di testo e inserisci il seguente codice:

Codice

#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;
}

Salva questo file come zombie.c

Il processo zombie creato tramite questo codice verrà eseguito per 60 secondi. È possibile aumentare la durata specificando un tempo (in secondi) nella funzione sleep().

Apri il Terminale ed esegui il seguente comando per compilare questo programma:

cc zombie.c -o zombie

Ora verrà creato un file eseguibile con il nome zombie.

Tieni presente che dovrai installare il compilatore GNU C se non è già installato sul tuo sistema tramite il seguente comando:

sudo apt-get install build-essential

Ora esegui il programma zombie tramite il seguente comando:

./zombie

Vedrai il seguente output:

È possibile utilizzare l'ID del processo padre (PPID) e l'ID del processo figlio (PID) durante il test; ad esempio uccidendo questo processo zombie tramite il comando kill.

Mentre questo processo è in esecuzione, puoi visualizzare le prestazioni del sistema in un'altra finestra di Terminale tramite il comando top. Sarai in grado di vedere 1 processo zombie attraverso la seconda riga dell'output.

Il comando ps ora mostrerà anche questo processo defunto e il programma zombie responsabile:

ps axo stat,ppid,pid,comm | grep -w defunct

Questo comando ti fornirà lo stato, parentID, l'ID del processo, il programma che sta eseguendo il processo zombie (il programma zombie che abbiamo eseguito in questo tutorial).

Ora hai imparato come creare un semplice processo zombie fittizio. Questo ti darà un'idea di come appare sul tuo sistema e di come puoi usarlo a scopo di test.

Articoli correlati: