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 ?