2012-02-05 10 views
11

Estoy creando procesos secundarios en un for -loop. Dentro del proceso secundario, puedo recuperar el PID infantil con getpid().¿Cómo obtener el PID infantil en C?

Sin embargo, por alguna razón cuando trato de almacenar el valor de getpid() en una variable declarada por el proceso principal, el cambio se anula cuando lo compruebo en el proceso principal. Supongo que esto tiene que ver con algún tipo de ámbito de variable de proceso. No estoy muy familiarizado con C, así que no puedo estar muy seguro.

De todos modos, ¿cuál es una forma de almacenar el resultado de getpid() de un PID secundario (cuando se llama desde el proceso hijo) a una variable en el proceso principal?

O tal vez otro enfoque es almacenar fork() en una variable en el elemento primario y llamar a alguna función en esa variable para recuperar el PID del niño? No sé cómo hacer esto tampoco, así que si esta es la mejor manera, ¿cómo harías esto?

+0

wow siento/soy como un idiota, gracias por las respuestas rápidas !!!! – Derek

+0

@Johnsyweb Estas son obviamente 2 oraciones. 's/y dentro del proceso hijo /. Dentro de estos procesos secundarios/'. – glglgl

+0

@glglgl: Aha. Soy un idiota. He editado la pregunta para que quede más clara para personas como yo :) – Johnsyweb

Respuesta

24

fork ya devuelve el pid del niño. Solo almacene el valor de retorno.

vistazo a hombre 2 tenedor:

VALOR DEVUELTO

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. 
-4

Hay dos funciones principales para obtener el identificador de proceso del proceso padre e hijo. getpid() y getppid()

+2

-1 'getpid()' devuelve el pid del proceso de llamada, no su (s) hijo (s) – Celeritas

1

Como se mencionó en la respuesta anterior, "fork() devuelve un valor de 0 al proceso secundario y devuelve la identificación del proceso del proceso secundario al proceso principal." Por lo tanto, el código se puede escribir de la siguiente manera:

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 */ 
} 

Este link es muy útil y explica en detalle.

0

Si llama tenedor de la siguiente manera:

pid = fork() 

Entonces PID es, de hecho, su hijo PID. Entonces puede imprimirlo desde el padre.

Cuestiones relacionadas