l'enfant et le parent de l'id de processus
Juste de me confondre avec un parent pid valeur de l'enfant dans le processus de bloc. Mon programme est donné ci-dessous:
int main(int argc, char *argv[])
{
pid_t pid;
pid=fork();
if(pid==-1){
perror("fork failure");
exit(EXIT_FAILURE);
}
else if(pid==0){
printf("pid in child=%d and parent=%d\n",getpid(),getppid());
}
else{
printf("pid in parent=%d and childid=%d\n",getpid(),pid);
}
exit(EXIT_SUCCESS);
}
De sortie:
pid parent=2642 et childid=2643
pid de l'enfant=2643 et parent=1
Dans "Avancé programmation Unix" il est dit que le processus enfant peut obtenir parent id de processus à l'aide de getppid() fonction. Mais ici, je suis "1", qui est "init" id de processus.
Comment puis-je obtenir le parent pid valeur dans le processus de l'enfant bloquer.. Merci de m'aider dans l'obtention de la sortie.
J'ai exécuté dans "Linux Mint" à l'OS", mais dans "WindRiver" OS que je ne reçois pas ce problème. Ce programme ne fait modifier son comportement en fonction de l'OS?
OriginalL'auteur Santosh Sahu | 2013-08-09
Vous devez vous connecter pour publier un commentaire.
C'est parce que le père peut /va sortir avant le fils. Si un père existe sans avoir demandé la valeur de retour de son enfant, l'enfant va obtenir la propriété par le processus avec pid=1. Ce qui est sur classique UNIX ou GNU systèmes SystemV init.
La solution est d'utiliser
waitpid()
dans père:OriginalL'auteur hek2mgl
Après la fourche, vous avez deux nouveaux processus et de nouvelles, vous pouvez connaître l'id d'enfant dans le parent, mais pas l'inverse. Si vous avez vraiment besoin de ce que vous auriez à ouvrir un pipe (popen) avant de la fourche et de la société mère pourrait écrire cela dans le tuyau et que l'enfant puisse le lire.
OriginalL'auteur David Elliman
Une fois que le parent complète de l'exécution et de l'enfant est toujours en cours d'exécution. Puis l'enfant est connu comme orphelin (comme celle du parent décédé) et il est adopté par le processus init si vous êtes à la connexion de root ( dont le pid =1 ).
Si vous voulez de l'enfant à la sortie de la première avant de parent alors utiliser wait() de l'appel système et de ses variantes.
OriginalL'auteur Sandeep_black
C'est de base un programme c pour calculer l'id d'enfant et de parent de l'id , y compris la fonction de veille.
OriginalL'auteur Rishabh Kumar
C'est tout simplement, parce que le processus parent n'existe plus. Si vous appelez la
wait()
la fonction du système, alors il existera jusqu'à ce que l'enfant a terminé son travail et vous obtiendrez le parent PID.OriginalL'auteur Naveen