Linux è robusto ?

Non abbastanza per questo semplice programma:

/*
Questo programma implementa una specie di DOS (Denial Of Service) "interno",
in quanto non fa altro che forkare continuamente. 
Il numero di processi in esecuzione cresce esponenzialmente, poiché tutti i processi continuano
a forkare all'infinito, anche quando hanno già generato un figlio. 
Ciò consuma rapidamente memoria e tempo di CPU, rendendo il sistema praticamente inutilizzabile.
*/

#include 

int main(void)
{
	while(1)
	{
		fork();
	}
	return 0;
}

Naturalmente è possibile inserire ulteriore codice prima e/o dopo la fork() per stampare messaggi, eseguire cicli inutili, ecc.

Una volta salvato il codice in un file, ad esempio

impalla.c
è sufficiente compilarlo con
gcc impalla.c -o impalla
ed eseguirlo con
./impalla
Linux smetterà quasi istantaneamente di rispondere a mouse e tastiera se siete sotto X.
Se siete in modo testo potete ancora cambiare agevolmente consolle, ma qualsiasi programma smetterà praticamente di girare.
Uno dei pochi modi per salvarsi consiste nel mandare CTRL-C al programma impalla oppure killare quanti più processi possibili (meglio se con PID basso) tramite top lanciato da una diversa consolle, meglio se come utente root
La soluzione estrema rimane sempre valida:
halt
(sempre come utente root).
L'unico problema è il tempo a vostra disposizione: i tempi di risposta del sistema diventano molto lunghi. Per riuscire ad eseguire un comando, anche il fatidico halt, possono essere necessari diversi minuti.

Concludendo: se proprio non sapete come passare il tempo, o se vi piace fissare il vostro monitor mentre il PC sembra inchiodato a-la-Winzozz, be', io vi ho dato uno spunto.


Torna alla pagina principale