Les Allergies
Alimentaires
Posez votre question Signaler

Fork() waitpid() ???? [Résolu]

tigrouzzz6 42Messages postés 6 février 2007Date d'inscription - Dernière réponse le 29 nov. 2007 à 17:48
Bonjour, qqn pourrais t il m envoyer un bout de code avec un fork et un waitpid() svp que je vois comment ca marche????
je voudrai lancer le script B qd le A se termine...donc je pensais faire un fork() ds A et wait pid() ds B....
est il possible de ne pas toucher au script de la fonction mais d utiliser le nom de la fonction à lancer (ficher.sh)????
merci bcp à ceux qui repondront;.....
Lire la suite 

Fork() waitpid() »

Suggestions
8 réponses
Réponse
+4
moins plus
Salut,

Tu ne peux pas utiliser fork et waitpid dans un script sh. Ces fonctions s'utilisent dans un programme compilé, la plupart du temps en C, ou alors dans un langage de script plus puissant comme le python ou le perl.... Bref dans un langage qui a accés aux fonctions de base du système.

Tu peux faire deux choses sachant que A et B sont des scripts shell:

_ Dans B, tu appelles A au début et là forcément le reste de B s'executera après A.
_ Tu crées un script C qui appelle A puis B.
_ Ou alors tu fais un programme avec fork et waitpid qui execute ces scripts. Le père crées un fils de lui-même (fork) qui executera A. Dans le père, avec waitpid tu attends que le fils soit terminé, puis tu lances B:

#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
    pid_t pid_fils;
    int statut;
    if( (pid_fils=fork()) == 0){ //On est dans le fils
        execl("/bin/bash", "/bin/bash", "./A", NULL);
    }
    else if(pid_fils == -1){
        //Erreur
    }
    else{ //On est dans le parent
        if(waitpid(pid_fils, &statut, 0) == -1){
            //Erreur
        }
         else{// Le fils s'est terminé
             execl("/bin/bash", "/bin/bash", "./B", NULL);
         }
     }
     return 0;
}

Ajouter un commentaire
Réponse
+2
moins plus
Oh, merci pour l'info, je connaissais pas le wait...
Ajouter un commentaire
Réponse
+1
moins plus
Je crois plutôt que wait attend la mort d'un de ses fils mais n'attend pas la mort de tous ces fils.

http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/wait.2.html
Ajouter un commentaire
Réponse
+0
moins plus
Hello
L'équivalent en shell:

commande_en_backgroud &
wait

wait attends toutes les tâches en backround ou wait PID pour attendre une tâche spécifique
Ajouter un commentaire
Réponse
+0
moins plus
merci bcp kilian pour les infos..j connais pa le execl mais j irai faire un petit man pour comprendre..j suppose que ca execute...
merci en tout cas
@bientot
Ajouter un commentaire
Réponse
+0
moins plus
Ca ne fait pas que executer, ça transforme carrément le processus courant en un autre processus.
Ajouter un commentaire
Réponse
+0
moins plus
Par contre tu dis qu en shell j peux pas l utiliser...je suis debutant la dedans...il faut donc que j cree un .c???que j compile etc???
merci
Ajouter un commentaire
Réponse
+0
moins plus
Inutile de passer par le C si tu n'en as pas besoin.
Comme je t'ai dit, tu peux lancer un script B uniquement après avoir attendu la fin d'un script A sans problème avec le shell.
Ajouter un commentaire
Ce document intitulé « fork() waitpid() ???? » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?