Como fork () sabe quando retornar 0?

Veja o seguinte exemplo:

int main(void)
{
     pid_t  pid;

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

Portanto, corrija-me se estiver errado, uma vez que o fork () executa um processo filho é criado. Agora passando por issoresponda fork () retorna duas vezes. Isso é uma vez para o processo pai e uma vez para o processo filho.

O que significa que dois processos separados passam a existir DURANTE a chamada da bifurcação e não após o término.

Agora eu não entendo como ele entende como retornar 0 para o processo filho e o PID correto para o processo pai.

É aqui que fica realmente confuso. esteresponda afirma que fork () funciona copiando as informações de contexto do processo e configurando manualmente o valor de retorno como 0.

Primeiro, estou certo ao dizer que o retorno a qualquer função é colocado em um único registro?Como em um ambiente de processador único, um processo pode chamar apenas uma sub-rotina que retorna apenas um valor (corrija-me se estiver errado aqui).

Digamos que eu chame uma função foo () dentro de uma rotina e essa função retorne um valor, esse valor será armazenado em um registro, por exemplo, BAR. Cada vez que uma função deseja retornar um valor, ela usa um registro de processador específico. Então, se eu posso alterar manualmente o valor de retorno no bloco do processo, posso alterar o valor retornado para a função, certo?

Então, estou correto ao pensar que é assim que fork () funciona?

questionAnswers(5)

yourAnswerToTheQuestion