Processus arriere/avant plan non zombie! - c/linux
davidauche
Messages postés150Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention 8 janvier 2008
-
31 déc. 2004 à 14:08
cs_Nashua
Messages postés48Date d'inscriptionlundi 29 novembre 2004StatutMembreDernière intervention16 mars 2005
-
3 janv. 2005 à 20:36
Bonjour a tt monde,
je ne comprends pas trop ça :
"Les processus lancés en arrière-plan et terminés ne doivent pas rester zombie mais leur terminaison doit être prise en compte par le shell (ou le programme principal - main)."
Qlqn d'entre vous peut m'expliquer ça, et surtout un simple exemple (avec un contre exemple si possible) pour mieux comprendre.
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 31 déc. 2004 à 14:50
"Les processus lancés en arrière-plan et terminés ne doivent pas rester zombie mais leur terminaison doit être prise en compte par le shell (ou le programme principal - main)."*
c'est incompréhensible effectivement. Qui a pondu ça ?
Je pense que cette personne a voulu dire que le processus pere doit attendre la terminaison de son fils, s'il ne l'attend plus, le processus fils devient zombie.
davidauche
Messages postés150Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention 8 janvier 2008 31 déc. 2004 à 15:04
merci,
non je ne pense pas ça, il parle sur : "Les processus lancés en arrière-plan et terminés", comme sous linux quand on lance emacs par exemple avec "emacs &", puis apres moments si on le ferme il nous affiche un ti message ([id] + done). bah si je ne me trompe pas !!?!, mais je ne sais pas comment faire ça aussi :(
svp aidez moi!
merci bq.
garslouche
Messages postés584Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention29 mai 20151 31 déc. 2004 à 15:45
Ca ressemble à un mauvais cours de système ça...
Les processus lancés en arrière-plan (avec le &) ne sont rien d'autre que des fork() donc des processus fils. Je suis d'accord avec ++fab : en clair quand il y a un shell et qu'on lance des applis en arriere-plan, ce sont des processus fils et donc il faut faire attention à ne pas faire de zombie.
On ne force pas une curiosité, on l'éveille. .................................................Daniel Pennac
Vous n’avez pas trouvé la réponse que vous recherchez ?
davidauche
Messages postés150Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention 8 janvier 2008 1 janv. 2005 à 14:45
lol, c'est pas un cours, mais un exo :p
"donc il faut faire attention à ne pas faire de zombie" et comment faire ça?
pour emacs par exemple : quand on lance avec & (en arriere plan), apres quand on le ferme il nous affiche .[pid] +Done!
comment programmer ça?! avec signal?!
autre question : comment faire passer un processus de forground à background et inversement!
cs_Nashua
Messages postés48Date d'inscriptionlundi 29 novembre 2004StatutMembreDernière intervention16 mars 2005 1 janv. 2005 à 18:03
Le zombie est un process qui a perdu sont pere et ne sait pas comment s'attacher a init. Comme le dit ++fab il suffit en theorie que le pere fasse un wait() ou waitpid() helas ce n'est pas si simple il faut aussi que le pere soit immunise contre les signaux en installant un handler pour ceux-ci. Le core dump helas ne peut pas etre intercepte. Il faut donc que le pere soit bug free!. Pour le kill -9 du pere, le fils sera tue aussi ce n'est peut etre pas ce que l'on veut obtenir.
Pour la seconde part de la question fg/bg ce n'est pas si simple. Je comprend qu'il est question de changer le comportement du process en cours d'execution de le passer en fg ou en bg par un moyen externe ( un signal envoye du shell pour passer de bg en fg et une combinaison de touche pour passer de fg en bg).
Le bg consiste a deconnecter le process de stdin ( on conserve cependant stderr et stdout) a deconnecter le controlling tty et eventuellement a l'attacher au process init . On peut prevoir une routine dans le process qui sera activee par l'appui de touches et deconnectera stdin.
le Fg est un peut plus complique mais on peut lancer a partir du shell un signal qui reconnectera le process a stdin (kill USR1 my_process_id).
Vaste sujet ......
Yves
davidauche
Messages postés150Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention 8 janvier 2008 2 janv. 2005 à 14:25
Merci Yves,
je demande svp de me donner un code qui fera les taches de bg/fg, car vraiment je me galère depuis moments :(, je dois le faire mais j'arrive pas :(, j'ai essayer avec kill et les signal, ça marche pas, je me suis bloquer dans tt les sens!!
svp aidez moi!
a+
davidauche
Messages postés150Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention 8 janvier 2008 3 janv. 2005 à 11:13
Merci Yves,
pour le code j'aimerais avoir une fonction ou procédure reçois le pid de process, et cette fonction permet le mettre
en Background et inversement, le processus est creer tt simplement avec fork. Tu peux utiliser system ou execvp
pour lancer emacs pour faire les tests.
Merci beaucoup d'avance, vraiment tu vas me sauver la vie!