fork bomb et overflow
|
25-01-2017, 22h33
(Modification du message : 25-01-2017, 22h34 par Commodor.)
Message : #1
|
|
Commodor
![]() Ho ! Dodgson ! ![]() Messages : 64 Sujets : 9 Points: 36 Inscription : Nov 2011 |
fork bomb et overflow
Hello !
J'ai ouvert une discussion sur un forum de programmation suite à un comportement étrange dans un de mes programmes. Je viens vous en faire part ici (ça peut être assez intéressant et je pense que vous saurez m'éclairer d'avantage ![]() En gros : J'effectue des calculs parallèles en créant plusieurs processus fils (disons 4). La création des process s'effectue dans une boucle et je stock leurs pid dans un tableau. Les process appellent une fonction (compute()) puis quittent (exit(0)). Code C :
À ce stade, aucun problème, le programme fonctionne bien. Puis j'ai voulu augmenter le nombre de process en modifiant la condition d'arrêt de la boucle (i < 6). Et forcément, j'ai oublié d'augmenter la taille du tableau ![]() Bref, segfault à l'exécution, rien d'étonnant. En revanche, j'ai continué à avoir des centaines et des centaines de process qui s'exécutaient (fork bomb). Du coup j'aimerai un peu mieux comprendre d'où ils peuvent venir. Le programme segfault après le fork du 5ème tour de boucle . J'ai donc 5 process zombies qui, après la fonction compute(), sont censés atteindre le exit(0), mais ce n'est visiblement pas le cas. (sauf peut être les 4 premiers) Pour être plus précis, c'est le père qui segfault lors de l'accès à la case pid[4] pour y mettre le return du fork() (là je suis ok). Mais du coup, le process fils (le 5ème donc), devrait normalement segfault aussi, puisque il évalue l'instruction : if (pid[4] == 0) Au lieu de ça, fork bomb. Serait-t'il possible qu'il y ait un 'overflow' et que les instructions qui suivent le fork soient "écrasées" (jusqu'à la fonction exit(0)) ![]() Vous avez sûrement fait déjà plus joujou avec ça que moi j'imagine ![]()
Hahaha you didn't say the magic word !
|
|
26-01-2017, 21h12
Message : #2
|
|
Yttrium
![]() Membre actif ![]() Messages : 106 Sujets : 14 Points: 48 Inscription : Jul 2012 |
RE: fork bomb et overflow
Bonjour,
Je ne suis pas certain de comprendre toutes les questions, ni même d'avoir la réponse exacte, mais essayons tout de même ![]() Code : pid_t pid[4]; Code : pid[i] = fork(); Alors lors de l’exécution de la condition. Code : if (pid[i] == 0) |
|
« Sujet précédent | Sujet suivant »
|
Utilisateur(s) parcourant ce sujet : 1 visiteur(s)