Dire "no, non funziona" è come andare dal medico e dire "sto male".
Risposta del medico: "E vorrei ben vedere! Se fossi stato bene non saresti qui." (forse sarebbe stato un po' più colorito e qualcuno gli avrebbe fatto 25 minuti di applausi...)

Quindi, è necessario sempre indicare cosa non va: la compilazione? l'esecuzione?

E' necessario sempre, se la compilazione non va bene, indicare perchè non va bene: il compilatore dà dei messaggi? Quali? In quale punto del codice?

E' necessario sempre, se l'esecuzione non va bene, indicare perchè non va bene: ci sono degli errori? Quali? Ottieni risultati non desiderati? Quali?

Ad ogni modo, a me funziona alla perfezione:
codice:
#include <unistd.h>

int main(int argc, char **argv) {
   execl("/bin/ls", "/bin/ls", (char *) 0, 0);
   return 0;
}
Ciao.