Synchronisation de processus.
Fermé
jehutyy
Messages postés
51
Date d'inscription
lundi 5 septembre 2011
Statut
Membre
Dernière intervention
1 mai 2015
-
31 oct. 2012 à 12:45
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 nov. 2012 à 20:13
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 nov. 2012 à 20:13
A voir également:
- Synchronisation de processus.
- Erreur synchronisation livebox ✓ - Forum Livebox
- Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus ✓ - Forum Windows 7
- Modifier priorité processus windows 10 permanent - Forum Programmation
- Synchronisation en pause google - Forum Réseaux sociaux
- Impossible d'obtenir le verrou de dpkg (/var/lib/dpkg/lock-frontend). il est possible qu'un autre processus l'utilise. ✓ - Forum Ubuntu
7 réponses
jehutyy
Messages postés
51
Date d'inscription
lundi 5 septembre 2011
Statut
Membre
Dernière intervention
1 mai 2015
2 nov. 2012 à 22:29
2 nov. 2012 à 22:29
Personne?
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
2 nov. 2012 à 23:06
2 nov. 2012 à 23:06
Moi, avec tout le respect que je te dois, j'aurais plutôt écrit ceci:
int main(int argc, char *argv[]) { pid_t pid; int status; switch (pid=fork()) { case -1: perror("fork\n"); exit(1); case 0: waitpid(getppid(), &status, 0); printf("je suis le fils %d, mon pere est %d\n", getpid(), getppid()); printf("fin du fils\n"); break; default: printf("je suis le pere %d\n", getpid()); printf("fin du pere\n"); } return EXIT_SUCCESS; }Bonne devinette et bonne continuation.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
2 nov. 2012 à 23:23
2 nov. 2012 à 23:23
Comme loupius,
Il faut mettre break; dans les "case"... Sinon, le programme continue les autres "case".
Il faut mettre break; dans les "case"... Sinon, le programme continue les autres "case".
ngounou25
Messages postés
96
Date d'inscription
mercredi 6 août 2008
Statut
Membre
Dernière intervention
5 juillet 2013
4
3 nov. 2012 à 22:45
3 nov. 2012 à 22:45
Pour ton code source, tu as la réponse ;-)
Pour ce qui est de la primitive "wait", elle est adressé au père, et non pas au fils. Tu ne pourais donc pas demander à un fils d'attendre que son père se termine d'abord !
Pour ce qui est de la primitive "wait", elle est adressé au père, et non pas au fils. Tu ne pourais donc pas demander à un fils d'attendre que son père se termine d'abord !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
armasousou
Messages postés
1267
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
4 nov. 2012 à 11:44
4 nov. 2012 à 11:44
Quand le processus pere se termine, les fils le suivent automatiquement.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
4 nov. 2012 à 12:05
4 nov. 2012 à 12:05
Et les processus orphelins ?
jehutyy
Messages postés
51
Date d'inscription
lundi 5 septembre 2011
Statut
Membre
Dernière intervention
1 mai 2015
7 nov. 2012 à 17:05
7 nov. 2012 à 17:05
ah génial merci beaucoup je vais tester ça.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
7 nov. 2012 à 20:13
7 nov. 2012 à 20:13
Voici ce qu'indique le man :
http://pwet.fr/man/linux/appels_systemes/wait/
La fonction wait suspend l'exécution du processus courant jusqu'à ce qu'un enfant se termine, ou jusqu'à ce qu'un signal à intercepter arrive. Si un processus fils s'est déjà terminé au moment de l'appel (il est devenu "zombie"), la fonction revient immédiatement. Toutes les ressources utilisées par le fils sont libérées.
La fonction waitpid suspend l'exécution du processus courant jusqu'à ce que le processus fils numéro pid se termine, ou jusqu'à ce qu'un signal à intercepter arrive. Si le fils mentionné par pid s'est déjà terminé au moment de l'appel (il est devenu "zombie"), la fonction revient immédiatement. Toutes les ressources utilisées par le fils sont libérées.
La valeur de pid peut également être l'une des suivantes :
< -1
attendre la fin de n'importe quel processus fils appartenant à un groupe de processus d'ID pid.
-1
attendre la fin de n'importe quel fils. C'est le même comportement que wait.
0
attendre la fin de n'importe quel processus fils du même groupe que l'appelant.
> 0
attendre la fin du processus numéro pid.
Cela répond à ta question, non ?
http://pwet.fr/man/linux/appels_systemes/wait/
La fonction wait suspend l'exécution du processus courant jusqu'à ce qu'un enfant se termine, ou jusqu'à ce qu'un signal à intercepter arrive. Si un processus fils s'est déjà terminé au moment de l'appel (il est devenu "zombie"), la fonction revient immédiatement. Toutes les ressources utilisées par le fils sont libérées.
La fonction waitpid suspend l'exécution du processus courant jusqu'à ce que le processus fils numéro pid se termine, ou jusqu'à ce qu'un signal à intercepter arrive. Si le fils mentionné par pid s'est déjà terminé au moment de l'appel (il est devenu "zombie"), la fonction revient immédiatement. Toutes les ressources utilisées par le fils sont libérées.
La valeur de pid peut également être l'une des suivantes :
< -1
attendre la fin de n'importe quel processus fils appartenant à un groupe de processus d'ID pid.
-1
attendre la fin de n'importe quel fils. C'est le même comportement que wait.
0
attendre la fin de n'importe quel processus fils du même groupe que l'appelant.
> 0
attendre la fin du processus numéro pid.
Cela répond à ta question, non ?