c – código fork ()

void main () { if ( fork () ) { printf ( "PID1 %d\n", getpid () ); } else { printf ( "PID2 %d\n", getpid () ); } } 

¿Qué hace este código? Sé que tiene algo que ver con las identificaciones de proceso, pero ¿no debería devolver algo a la condición para determinar si se trata de un proceso hijo / padre?

Generalmente es:

 pid_t pid = fork(); if(pid == 0) { //child } else if(pid > 0) { //parent } else { //error } 

La página del manual dice:

  VALOR DEVUELTO
    Al completar con éxito, fork () devolverá 0 al niño 
    procesar y devolverá el ID de proceso del proceso hijo a la 
    proceso de padres  Ambos procesos continuarán ejecutándose desde 
    La función fork (). 
    De lo contrario, -1 será devuelto al proceso padre, no se procesará hijo 
    se creará, y errno se establecerá para indicar el error.

El código anterior crea un nuevo proceso cuando ejecuta la llamada a la bifurcación, este proceso será una copia casi exacta del proceso original. Ambos procesos continuarán ejecutándose por separado en el formulario de devolución, la llamada de la bifurcación que plantea la pregunta “¿Cómo puedo saber si soy el nuevo proceso o el anterior?” Ya que son casi idénticos. Para hacer esto, los diseñadores de la bifurcación hicieron que la llamada de la bifurcación devolviera cosas diferentes en cada proceso, en el nuevo proceso (el hijo) la llamada de la bifurcación devuelve 0 y la bifurcación del proceso original (el padre) devuelve el ID del nuevo proceso para que el padre pueda interactuar con ella

Por lo tanto, en el código, la llamada a la bifurcación crea un proceso secundario, ambos procesos realizan la instrucción if seporatly. En el padre, el valor de retorno no es cero, por lo que el padre ejecuta la instrucción if. En el hijo, el valor de retorno es 0, por lo que hace la instrucción else. Espero que esto ayude 🙂

El valor de retorno de fork () indica si el proceso es el padre o el hijo. Así que el niño siempre imprimirá “PID2 0”, porque si fork () devuelve 0, se ejecuta la segunda parte de la sentencia if.