Bonjour,

J'aurais besoin de quelques éclaircissements suite à un comportement étrange dans un de mes programmes.

J'effectue des calculs parallèles en créant plusieurs processus fils :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
int main(void)
{
      pid_t pid[4];
 
        ...
 
      for (i = 0; i < 4; i++) {
            pid[i] = fork();
            if (pid[i] == 0) {
                  compute(x, y, borne);
                  exit(0);
            }
     }
 
     while (wait(NULL) > 0);
     return 0;
}
Jusque là pas de problème.

J'ai eu le malheur de changer la condition d'arrêt de la boucle (i < 6) sans augmenter la taille du tableau (pid[4]).
J'ai donc bien évidemment eu un segmentation fault dans le processus père.
Normalement les processus fils déjà créés (au nombre de 5 au moment du segfault) deviennent des zombies (du moins ne sont plus rattachés au père et continuent leurs calculs).
Une fois la fonction 'compute()' finie, les processus sont censés rencontrer exit(0). Hors ce n'est pas le cas. J'ai des centaines de nouveaux processus qui s'exécutent sans interruption (fork bomb).

Cela viendra-t'il de l'overflow qui "écrase" les instructions qui suivent (jusqu'au exit(0)) créant donc une boucle infinie ? (du même genre que les attaques par buffer overflow dans les chaînes de caractères) ?

Des avis ?