problème de fils - C - Programmation
Marsh Posté le 08-04-2006 à 19:28:37
je viens de remarquer qu'il y a beaucoup de fautes d'orthographe dans mon sujet. la honte !
désolé tout le monde...
Marsh Posté le 08-04-2006 à 23:48:40
Il me semble que tu envoye le signal avant d'attendre la fin du processus:
Code :
|
en plus tu ne vérifie pas que waitpid retourne un pid valide.
Marsh Posté le 09-04-2006 à 00:50:07
nargy a écrit : Il me semble que tu envoye le signal avant d'attendre la fin du processus:
|
mais je n'envoie aucun signal.je dis juste à mon programme qu'il doit effectuer la fonction "afficher_terminaison" quand il reçoit la signal sigchild.
est ce que ça s'exécute correctement chez toi?
Marsh Posté le 09-04-2006 à 00:58:23
ha ouais, nawak, pour la peine je sort mon compilo, et....
ça compile pas, entre autre il manque le fichier readcmd.h
Marsh Posté le 09-04-2006 à 01:01:40
il y a aussi la définition de la fonction afficher_terminaison() dans le main() !
Marsh Posté le 08-04-2006 à 19:22:48
Bonjour;
je suis en tarin de réaliser un programme C qui simule un shell. J'ai commancé par creer une procédure "readcmd"
qui lits de l'entrée stnadard une commande tapé par l'utilisateur et la stocke dans une "struct cmdline *l;
Bon mon programme réalise déjà pas mal de chose.
Ce que je voudrais faire maintenant, c'est de lui donner la possibilité d'afficher à l'ecran la terminaiseon d'un processus lancé en tache de fond.
C'est à dire, grace à la fonction "signal", je demande à mon programme d'afficher une phrase qui indique explicitement la terminaison d'un processus fils:
signal(SIGCHLD,afficher_terminaison);
voila mon programme pour que les choses soient claires:
Le problème est que lorsque j'exécute mon programme, la terminaison du premier processus fils se passe bien, mais à partir de la 2ème, il affiche la terminaison avant la fin réelle du processus fils.voila une trace de mon exécution:
ensibm:~/SEPC/little_shell>tst
shell> nedit &
seq[0]: nedit &
shell> le processus lancé en background est s'est terminé
shell> nedit &
seq[0]: nedit &
le processus lancé en background est s'est terminé
shell>
ou bien essayez de l'exécuter vous meme pour mieux voir.
quelqu'un a une explication?
merci d'avance