Expliquation sur les commande arriere paln &

yasminou Messages postés 96 Statut Membre -  
yasminou Messages postés 96 Statut Membre -
Bonjour,
je dois ecrire un programme en C qui permet d'executer les commande en avant et arriére plan,alors avant plan pas de problème le processus père doit attendre la terminaison du processus fils ,mais dans le cas d'une commande arriere plan on doit eviter que ce processus reste zombie normalement on utilise waitpid avec l'option WNOHANG mais je sais pas comment gérer les signaux j'ai pa bien compris comment sa se passe la communication asynchrone entre le processus père et son fils qui s'execute en arrière plan
pouvez vous m'eclaircir?

P.S:j'ai essayé d'executer avec execvp et dans le programme du père je fait pa un wait ,bah
par exemple si je tape ps& il m'affiche:
segmentation fault
Press ENTER to continue.
puis il m'affiche le resultat de ps

merci
A voir également:

3 réponses

macartur95 Messages postés 168 Statut Membre 23
 
Bonsoir,

Le & maintient en tache de fond un programme dans le shell du terminal qui l'a lancé et il faut un exit 0 dans le shell ou un code similaire en C pour lui dire que le programme est terminé correctement et l'os tue tous les process.

Le & détache le terminal du système (coupure connexion automatique par les switchs ...) ,le programme continuant .
on utilise le & pour lancer un programme très long et en cas de coupure de la connexion telnet,ssh au serveur ,il continue sinon ça kill le process.
0
yasminou Messages postés 96 Statut Membre 3
 
merci pr votre reponse
bah j'execute les commandes dans une boucle
while(1)
{
lire commande();
executer(commande)
}

dans executer commande si commande avnat plan je fais un wait dans le père sinon je sais pas comment eviter comment qu'il reste zombie?
alors qu'est ce que j'ai fait,si commande arriere plan normalement j'affiche pas le resultat de la commande alors je le derige vers /dev/null
je pense le beug est la puisque il boucle infiniment je sais pas si mon raisonnement est juste,si c'est le cas est ce qu'il faut faire d'autre traitement supplementaire?
sinon si je travaille avec waitpid avec l'option NOHANG est ce que je dois a chaque fois verifié la liste qui contient les PID des processus qui s'executent en arriere plan?
merci d'avance
0
macartur95 Messages postés 168 Statut Membre 23
 
Bonsoir,

Désolé je ne connais pas le c ; votre boucle while ne finit jamais meme en sortie de votre programme,il faut un done mais les { } me font tiquer; normalement une boucle while ressemble à ça

while [ condition ]
do
statements
done
0
yasminou Messages postés 96 Statut Membre 3
 
les {} c'est normal en langage C
le probleme n'est pa la ,c'est comment informé le processus père de la terminaison de l'un de ses fils qui s'execute en arriere plan

PS: je suis obligé de travaillé en C
thanks
0
macartur95 Messages postés 168 Statut Membre 23
 
on dit par forker en langage c processus qui en genere un autre

je vais paraitre neuneu mais on dirait que vous compilez du bash avec du c ou c'est la syntaxe du c.

Je ne peux pas vous aider plus,je ne fais que du shell et je maintiens que le & est propre au shell.

je pense que la solution à votre problème pour gèrer vos process est de gérer les PID créer par chaque fils en les sauvegardant dans un fichier log,trace ou mémoire et vous les killez dans votre programme ou vous en sortez par une fonction qui tue le fils en cours.Normalement quand vous quittez un programme proprement il se tue de lui meme .Cela semble logique mais c'est compliqué pour moi.

Un coup de ggogle vous aidera plus que moi car je ne suis pas copain avec la programmation C
0
yasminou Messages postés 96 Statut Membre 3
 
merci commeme pour tes reponses rapides
bah d'aprés google faut que je change le handler de SIGCHLD j'ai trouvé un code prèt mais j'ai pa compris pourquoi il ont travaillé pareil,je suis en train de chercher la doc sur le remplacement des routine

thanks a lot
0