¿Cómo sabe fork () cuándo devolver 0?

Tome el siguiente ejemplo:

int main(void)
{
     pid_t  pid;

     pid = fork();
     if (pid == 0) 
          ChildProcess();
     else 
          ParentProcess();
}

Así que corrígeme si estoy equivocado, una vez que fork () ejecuta un proceso hijo se crea. Ahora yendo por estoresponder fork () regresa dos veces. Eso es una vez para el proceso padre y otra para el proceso hijo.

Lo que significa que existen dos procesos separados DURANTE la llamada fork y no después de que finalice.

Ahora no entiendo cómo entiende cómo devolver 0 para el proceso secundario y el PID correcto para el proceso primario.

Esto se vuelve realmente confuso. Estaresponder establece que fork () funciona copiando la información de contexto del proceso y configurando manualmente el valor de retorno a 0.

Primero, ¿tengo razón al decir que el retorno a cualquier función se coloca en un único registro?Dado que en un entorno de procesador único, un proceso solo puede llamar a una subrutina que devuelve solo un valor (corríjame si me equivoco aquí).

Digamos que llamo a una función foo () dentro de una rutina y esa función devuelve un valor, ese valor se almacenará en un registro, digamos BAR. Cada vez que una función desea devolver un valor, utilizará un registro de procesador particular. Entonces, si puedo cambiar manualmente el valor de retorno en el bloque de proceso, ¿puedo cambiar el valor devuelto a la función correcta?

Entonces, ¿estoy en lo cierto al pensar que así es como funciona fork ()?

Respuestas a la pregunta(5)

Su respuesta a la pregunta