Programmare con Arte n° 2

Da MelugWiki.

Jump to: navigation, search

Forkbomb

by fork fiblan

Cos'è? Iniziamo dalla definizione del jargon:

fork bomb /n./ [Unix] A particular species of wabbit that can be written in one line of C (`main() {for(;;)fork();}') or shell (`$0 & $0 &') on any Unix system, or occasionally created by an egregious coding bug....

Se vi state annoiando, iniziate a ballare: aprite un terminale e digitate questa riga di comando seguita da invio

:(){ :|:& };: 

Quello che avete scritto è forse il più artistico forkbomb esistente. L'autore è jaromil ( per chi non lo conoscesse: http://rastasoft.org/ ) E' probabile che sentiate le ventole del vostro portatile accendersi e fra un po la vostra macchina si sarà completamente piantata (forse non succede proprio niente: il vostro kernel ha 'intercettato' il fork o avete impostato precedentemente dei limiti sui processi).

Come al solito, in questa rubrica, voglio farvi assaporare la sublime arte della programmazione, spiegando il funzionamento di questa "linea".

Abbiamo di fronte un 'comando' di 13 caratteri (+ invio). I caratteri ascii utilizzati sono 9 ":(){|&};" (+ lo spazio). In realtà sono dei comandi definiti da uno standard POSIX, quindi i 13 caratteri della morte dovrebbero funzionare su qualsiasi shell che rispetti lo standard posix (su sistemi unix-like).

Un occhio attento nota subito che abbiamo qualcosa di simile ad una funzione. La funzione si chiama ":". La riscrivo per quelli che non riescono a vederla!!!

:(){
:|:&
};
:

è la stessa cosa di

funzione(){
funzione|funzione &
};
funzione

Però invece di utilizzare come nome di funzione qualcosa di facilmente individuabile, jaromil utilizza proprio i due punti... avete capito il bastardo :) ? In pratica c'è la dichiarazione di una funzione ":" che non accetta parametri () e nell'ultima riga la funzione ":" viene richiamata. Dentro la funzione cosa c'è?

:|:&

Ancora due punti, una pipe e di nuovo due punti.... il tutto con un & finale che mette in background. I due punti ":" richiamano al solito la funzione (abbiamo quindi ricorsione), l'output viene inviato tramite pipe ad una nuova chiamata di funzione ":"

Insomma se non è arte questa!!!

Concludo con le parole di Jaromil:

“In considering a source code as literature, I am depicting viruses as poésie maudite, giambi against those selling the Net as a safe area for a bourgeois society. The relations, forces and laws governing the digital domain differ from those in the natural. The digital domain produces a form of chaos—sometimes uncomfortable because unusual, although fertile—to surf thru: in that chaos viruses are spontaneous compositions, lyrical in causing imperfections in machines made to serve and in representing the rebellion of our digital serfs.” Copyleft 2002 by Jaromil

Qualcuno potrebbe domandarsi ma come è possibile bloccare una fork bomb? Il comando 'ulimit' vi verrà incontro.... ma non solo, una googlata puo' aiutare.

....e voi forkate con moderazione!

Personal tools