web-dev-qa-db-fra.com

Comment obtenir PID enfant en C?

Je crée des processus enfants dans une boucle for-. Dans le processus enfant, je peux récupérer le PID enfant avec getpid().

Cependant, pour une raison quelconque, lorsque j'essaie de stocker la valeur de getpid() dans une variable déclarée par le processus parent, la modification est annulée lorsque je la vérifie dans le processus parent. Je suppose que cela a à voir avec une sorte de portée de variable de processus. Pas vraiment familier avec C, donc je ne peux pas être trop sûr.

Quoi qu'il en soit, comment stocker le résultat de getpid() d'un PID enfant (lorsqu'il est appelé à partir du processus enfant) dans une variable du processus parent?

Ou peut-être qu'une autre approche consiste à stocker fork() dans une variable du parent et à appeler une fonction sur cette variable pour récupérer le PID de l'enfant? Je ne sais pas comment faire cela non plus, donc si c'est la meilleure façon, comment feriez-vous cela?

16
Derek

fork renvoie déjà le pid de l'enfant. Enregistrez simplement la valeur de retour.

regardez la fourche homme 2:

VALEURS DE RETOUR

 Upon successful completion, fork() returns a value of 0 to the child process and
 returns the process ID of the child process to the parent process.  Otherwise, a
 value of -1 is returned to the parent process, no child process is created, and
 the global variable errno is set to indicate the error.
31
MByD

Comme mentionné dans la réponse précédente, "fork () renvoie une valeur de 0 au processus enfant et renvoie l'ID de processus du processus enfant au processus parent." Ainsi, le code peut être écrit de cette façon:

pid = fork(); /* call fork() from parent process*/
if (0 == pid)
{
  /* fork returned 0. This part will be executed by child process*/
  /*  getpid() will give child process id here */
}
else
{
  /* fork returned child pid which is non zero. This part will be executed by parent process*/
  /*  getpid() will give parent process id here */
} 

Ce lien est très utile et explique en détail.

5
Amal Roshan

si fork() est créé avec succès, il renvoie 0 valeur dans le processus enfant.

int main(void)
{
    int id;
    id= fork();
    if(id==0)
    {
        printf("I am child process my ID is   =  %d\n" , getpid());
    }
}
2

Si vous appelez fork de la manière suivante:

pid = fork()

Le pid est en fait votre PID enfant. Vous pouvez donc l'imprimer à partir du parent.

1
Papbad