Fork() waitpid() ????
Résolu/Fermé
tigrouzzz6
Messages postés
41
Date d'inscription
mardi 6 février 2007
Statut
Membre
Dernière intervention
22 juin 2008
-
2 août 2007 à 23:01
samuel - 29 nov. 2007 à 17:48
samuel - 29 nov. 2007 à 17:48
A voir également:
- Waitpid man
- Slender man jeu - Télécharger - Tir FPS
- Net set man - Télécharger - Divers Réseau & Wi-Fi
- Hey man jouet ✓ - Forum Jeux vidéo
- Man putnbr - Forum Programmation
- D gray man scan - Forum Loisirs / Divertissements
8 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
3 août 2007 à 00:18
3 août 2007 à 00:18
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:
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; }
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
3 août 2007 à 10:30
3 août 2007 à 10:30
Oh, merci pour l'info, je connaissais pas le wait...
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
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/wait.2.html
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
3 août 2007 à 10:28
3 août 2007 à 10:28
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tigrouzzz6
Messages postés
41
Date d'inscription
mardi 6 février 2007
Statut
Membre
Dernière intervention
22 juin 2008
1
3 août 2007 à 17:45
3 août 2007 à 17:45
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
merci en tout cas
@bientot
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
3 août 2007 à 17:49
3 août 2007 à 17:49
Ca ne fait pas que executer, ça transforme carrément le processus courant en un autre processus.
tigrouzzz6
Messages postés
41
Date d'inscription
mardi 6 février 2007
Statut
Membre
Dernière intervention
22 juin 2008
1
3 août 2007 à 17:53
3 août 2007 à 17:53
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
merci
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
3 août 2007 à 18:02
3 août 2007 à 18:02
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.
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.