Dúvida sobre Fork

4 views
Skip to first unread message

Stefan Teixeira

unread,
Dec 7, 2010, 5:52:46 AM12/7/10
to Comp-Prog
int main () {
   int x = 0;
   int pid;
   
   pid = fork();

   if (pid > 0) x++;
   x++;

   fork();
   x++;

   sleep(8);
   
   x++;
   printf ("Valor de X: %d\n", x) ;
}


Nesse código, o que será impresso?

Rodrigo Ney

unread,
Dec 7, 2010, 6:02:21 AM12/7/10
to comp...@googlegroups.com
cara ficou meio bananada isso ai =P
mas pelo o que eu entendi o a galera vai entrando meio que na ordem no sleep... tipo p1 entra antes, depois o p2 depois o p3 depois o p4, é o que parece pra mim o.O
o retorno da funcao forke vai ser >0 quando for o pai e 0 quando for o filho, entao pra p1 o pid ficaria >0, pra p2 o pid ficaria =0
Eu chutaria :

4
3
4
3

Se eu Nao chutei errado a parada so sleep, deve mudar a ordem pra algo do tipo 4,4,3,3.
Sei la, fiz em 2min aqui, leva mta fé nao haha


2010/12/7 Stefan Teixeira <stef...@gmail.com>

Stefan Teixeira

unread,
Dec 7, 2010, 6:22:20 AM12/7/10
to comp...@googlegroups.com
Po executando varias vezes eu percebi que esse negócio é aleatório, imprime 3344, 3434, 4433, etc. então acho que nem cobrariam isso numa prova né, só se fosse que nem a questão da lista 3, que tem wait e tal...

Valeu Ney!

Felipe Faria

unread,
Dec 7, 2010, 6:26:40 AM12/7/10
to comp...@googlegroups.com
Já tava respondendo isso.
Não tem padrão de ordem de execução entre processos diferentes, isso depende lá do cpu no momento.
Pra controlar a ordem de execução vc precisa usar o wait.
Mas supondo que caia essa questão na prova tem que dizer que é aleatório mesmo.

Em 7 de dezembro de 2010 09:02, Rodrigo Ney <rodrigo...@gmail.com> escreveu:
Reply all
Reply to author
Forward
0 new messages