wait () comportamento estranho no Ubuntu

3

Eu escrevi o seguinte programa e executei no terminal. Mas eu estou confuso que o programa não está exibindo os resultados como o comportamento de espera é descrito na internet. Copiei esse código de um livro.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
pid_t childid;

if(argc!=2)
{
    printf("Please an argument at terminal\n");
    return 0;
}

int i,n = atoi(argv[1]);

for(i=0;i<n;i++)
{
    childid=fork();
    if(childid==0)
    {
        //sleep(20);
        break;
    }
}
while(wait(NULL)>0);

printf("i= %d\n Process ID %d\n Parent ID %d\n Child ID %d\n",i,getpid(),getppid(),childid);

return 0;

}

O processo pai não deve executar a última declaração "printf" n time, onde n é o número de filhos criados. O que acontece quando o pai chama enquanto (wait (NULL) > 0); e a criança ainda está em circulação?

Obrigado

    
por Umer Farooq 23.09.2012 / 13:41

1 resposta

3

A chamada de sistema wait() suspende a execução do processo de chamada até que um dos seus filhos termine.

wait () retorna o pid da criança cujo estado é alterado (ou digamos, terminado). Retorna -1 em erro (quando não há filho para esperar).

Portanto, o loop while será executado 0 vezes no processo filho (bifurcado). E no processo pai será executado n (não de processo filho) vezes.

Este programa imprime a última mensagem n + 1 vezes. (1 no principal e n nas crianças)

    
por Deepak 23.09.2012 / 14:12

Tags