Un programme où les processus père crée un processus enfant et le parent et l'enfant exécuter le même programme d'un code différent
//same program different code
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
int pid;
pid=fork();
if(pid<0)
{
printf("\n Error ");
exit(1);
}
else if(pid==0)
{
printf("\n Hello I am the child process ");
printf("\n My pid is %d ",getpid());
exit(0);
}
else
{
printf("\n Hello I am the parent process ");
printf("\n My actual pid is %d \n ",getpid());
exit(1);
}
}
J'ai essayé ce , j'espère que sa bonne .
Mais je ne suis pas satisfait avec les résultats .
La sortie est :
Hello I am the parent process
My actual pid is 4287
ashu@ashu-VirtualWorld:~/Desktop/4thSemester/testprep$
Hello I am the child process
My pid is 4288
S'il vous plaît aider moi je ne peux pas comprendre sa sortie , je veux le processus de l'enfant à se produire en premier et ensuite le processus parent .
Aussi , lorsque la fin de l'exécution, le contrôle est transféré au programme , donc, de retour à la terminale j'ai utiliser ctrl+c , je veux qu'après l'exécution du programme se termine le contrôle des transferts vers le terminal .
Pourquoi voulez-vous la programmation parallèle, si vous voulez quelque chose à "produire d'abord"? Pourquoi ne pas simplement écrire dans la séquence? Cela dit, il existe une myriade d'options pour vous d'aller, par exemple, l'utilisation de Mutex, retards, etc...mais pour votre scénario, vous n'avez pas besoin de processus parallèles.
J'ai fait écrire le processus de l'enfant dans le but premier , mais suis Parent d'abord le processus 🙁 Aussi, je suis de nouveau à des termes tels que les mutex,les retards !
Oui, la réponse de l'détendez-vous, dit-il assez bien...qu'ils sont censés exécuter en parallèle. Ce qui signifie qu'ils reçoivent leur propre tranches de temps de temps processeur et à tour de rôle dans 'exécution' (bases de multitâche). Maintenant, votre enfant sera à peu près toujours un peu derrière votre processus parent, parce que le processus parent est toujours "elle", jusqu'à la fin de sa tranche de temps, alors que le processus de l'enfant doit attendre son tour.
J'ai fait écrire le processus de l'enfant dans le but premier , mais suis Parent d'abord le processus 🙁 Aussi, je suis de nouveau à des termes tels que les mutex,les retards !
Oui, la réponse de l'détendez-vous, dit-il assez bien...qu'ils sont censés exécuter en parallèle. Ce qui signifie qu'ils reçoivent leur propre tranches de temps de temps processeur et à tour de rôle dans 'exécution' (bases de multitâche). Maintenant, votre enfant sera à peu près toujours un peu derrière votre processus parent, parce que le processus parent est toujours "elle", jusqu'à la fin de sa tranche de temps, alors que le processus de l'enfant doit attendre son tour.
OriginalL'auteur Ashutosh Singh | 2013-04-18
Vous devez vous connecter pour publier un commentaire.
La chose avec les processus en parallèle, c'est qu'ils ne correspondent pas bien à l'idée de "passe d'abord"; ils sont en cours d'exécution en parallèle.
Bien sûr, vous pouvez modifier les chances d'avoir un retard dans le code de la mère, avant que les impressions.
Pas du tout sûr de ce que tu veux dire par "le contrôle est transféré vers le programme"; depuis les deux processus vont frapper
exit()
très rapidement après l'avoir imprimé leurs messages, il devrait y avoir aucun programme de gauche à transférer le contrôle à.Notez que vous n'avez pas besoin d'utiliser
exit()
demain()
, il doit se terminer par un simple vieuxreturn
depuis son type de retour estint
.Ok ... je trouve encore très difficile à croire, le programme n'a pas de contenu supplémentaire après l'impression et de la portée
exit()
, il n'y a rien de rester. Ce doit être un artefact de votre environnement, ou quelque chose.enfant va à l'arrière-plan? parent atteint
exit()
mais l'enfant s'exécute encore. Ils sont des processus distincts.OriginalL'auteur unwind
Dans ce programme, l'if (pid == 0) signifie enfant et pid > 0 signifie que parent,
le parent et l'enfant sont en cours d'exécution dans le même temps d'accéder à la même ressource de sorte que le problème de la condition de la course se produire.
Le que l'on est d'abord accéder à la ressource de ses exécutés en premier, et un autre est
exécutée au plus tard.
La fonction d'attente d'éviter la condition de la course et quand l'enfant l'exécution complète
jusqu'à ce que le parent d'attente et après avoir exécuté le parent
La valeur par Défaut vfork éviter la condition de la course
Aussi, si vous voulez obtenir l'ID de processus du processus parent. Utiliser int ppid = getppid() fonction.
La sortie du programme est:
OriginalL'auteur loganaayahee