0 votes

Défaut de segmentation du signal 11 lors de l'appel système wait() ?

Je travaille sur un shell basique en C. Dans mon implémentation de tuyaux Je compte les commandes sur la ligne et je procède par itération fork() un nouveau processus.

A la fin de chaque itération, I wait() sur l'enfant avant de passer à la commande suivante. Cela fonctionnait bien dans le code précédent, mais je ne sais comment, je l'ai cassé :

Program terminated with signal 11, Segmentation fault.
#0  0xfef28730 in _waitpid () from /usr/lib/libc.so.1

(gdb) backtrace
#0  0xfef28730 in _waitpid () from /usr/lib/libc.so.1
#1  0xfef28770 in _wait () from /usr/lib/libc.so.1
#2  0xfef696d1 in wait () from /usr/lib/libc.so.1
#3  0x08051428 in main ()

Je comprends que wait() ne fera que récolter le processus zombie si l'enfant s'est déjà arrêté.

Pourquoi, et dans quels cas wait() provoque-t-elle une erreur de segmentation ? Comment faire pour déboguer ce genre de choses ?

1voto

unwind Points 181987

Examinez les arguments avec lesquels vous appelez wait(), ainsi que les problèmes d'écrasement de la mémoire. Exécutez votre programme à travers Valgrind pour obtenir de l'aide afin de détecter très facilement de nombreux écrasements.

1voto

atomice Points 2273

Vous passez probablement un pointeur invalide pour l'argument de statut à wait(2).

Pour ce qui est de la manière de déboguer ce genre de choses, la première chose à faire serait d'installer les symboles de débogage pour votre bibliothèque C. Ensuite, regardez sur quel pointeur se produit l'erreur et remontez la pile (si possible).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X