Considere o seguinte fragmento de código:

  if (fork() == 0)
  { a = a + 5; printf(“%d,%d\n”, a, &a); }
  else { a = a –5; printf(“%d, %d\n”, a, &a); } 

Sejam u, v os valores impressos pelo processo pai e x, y os valores impressos pelo processo filho. Qual das opções a seguir é VERDADEIRA?
(A) u = x + 10 e v = y
(B) u = x + 10 e v! = Y
(C) u + 10 = x e v = y
(D) u + 10 = x e v! = Y

Resposta: (C)
Explicação: fork() retorna 0 no processo filho e o ID do processo filho no processo pai.
Em Criança (x), a = a + 5
Em Pai (u), a = a - 5;
Portanto, x = u + 10.
Os endereços físicos de 'a' em pai e filho devem ser diferentes. Mas nosso programa acessa endereços virtuais (supondo que estejamos executando em um sistema operacional que usa memória virtual). O processo filho obtém uma cópia exata do processo pai e o endereço virtual de 'a' não muda no processo filho. Portanto, obtemos os mesmos endereços nos pais e nos filhos. Mas em python3 vey não serão iguais. Veja isto (para Python) e veja isto  (para C).
Teste desta questão

Aprenda todos os conceitos do GATE CS com aulas gratuitas ao vivo em nosso canal do youtube.