Ciao
quindi la fork crea una copia di tutti i registri della CPU compreso il file pointer, crea una copia del data e heap (anche con i valori contenuti all'interno delle variabili non ci avrei creduto finché non l'ho provato) del code credo di no ma sarebbe tutto da verificare.
La cosa importante è che crea una copia del file pointer, allora il primo processo ancora unico farà la prima fork da cui nascerà un figlio, sia il padre che il figlio si troveranno un'altra fork e così via, la terza forck sarà fatta da 2^2 processi e in fine avremo 2^3 processi.
quindi
pid7=fork();
che è l'ottava ci saranno 2^8 processi
poi
if (pid0>0) {
pid8 = fork();
}
fa eseguire la fork solo ai figli della prima fork
che sono 2^8-1, dopo di che risultano 2*(2^8-1) processi.
con l'ultima fork tutti questi si sdoppiano infine avremo 2^10-4 processi
1020 processi.
Per lo sleep non saprei dirti dipende, in che contesto è stato pensato questo programma, a vedere così mi sembra a puro scopo didattico perché in futuro (non poi così prossimo per te) vedrai le shared memory per interagire tra processi e scambiarsi valori.
PS. Niente di più facile che abbia sbagliato qualcosa quindi se trovate errori correggete pure.
Ciao