1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

processos Zombi

Discussão em 'Programação' iniciada por Bruno_Martins, 28 de Maio de 2009. (Respostas: 1; Visualizações: 711)

  1. ola a todos!!!
    tenho aki um exercicio a fazer para completar a minha estadia de ERASMUS aki na romenia,mas nao sou assim tao bom em c... consegui fazer o resto que me pediam mas este exercicio nao o consigo fazer...pelo menos nao dar a ordem que a professora me pede...tente me ajudar!!! :confused:


    aki vai:

    a pergunta do exercicio é:

    Supondo que, após o fork, o main é dado primeiro para o pai, em que ordem se irá executar as instruções deste programa?

    processo Zombi

    Código:
    #include <unistd.h>
    #include <stdio.h>
     
    main() {
    int p1, p2;
     
    if ( ( p1 = fork() ) == 0 ) {
    printf( "filho : %d pais : %d\n\n", getpid(), getppid() );
     
    if ( ( p2 = fork() ) == 0 ) {
    printf( "ptfilho : %d pais : %d\n\n", getpid(), getppid() );
    sleep( 6 );
    printf( "\n\nacorda du ptfilho\n\n" );
    printf( "ptfilho : %d pais : %d\n\n", getpid(), getppid() );
    exit( 2 );
    }
     
    sleep( 2 );
    printf( "\n\nfilho : %d pais : %d\n\n", getpid(), getppid() );
    exit( 1 );
    }
    printf( "pai : %d pais : %d\n\n", getpid(),getppid() );
    sleep( 4 );
    printf( "\n\n" );
    execlp( "ps", "ps", "l", 0 );
    }
     
     
    Última edição pelo moderador: 28 de Maio de 2009
  2. Baderous

    Baderous Banido

    Peço desculpa mas a minha solução anterior tinha erros.

    No início existe um processo (1).
    Código:
    if ( ( p1 = fork() ) == 0 ) {
    É criado um processo filho (2). O código que está dentro desse if vai ser
    executado apenas pelo filho.
    Código:
    printf( "\n\nfilho : %d pais : %d\n\n", getpid(), getppid() );
    O processo filho (2) cria um processo filho (3) e faz sleep de 2 segundos.
    Código:
    if ( ( p2 = fork() ) == 0 ) {
    }
    sleep( 2 );
    O processo filho (3) executa e faz sleep de 6 segundos.
    Código:
    printf( "ptfilho : %d pais : %d\n\n", getpid(), getppid() );
    sleep( 6 );
    O processo pai (1) executa e faz sleep de 4 segundos.

    Código:
    printf( "pai : %d pais : %d\n\n", getpid(),getppid() );
    sleep( 4 );
    O processo filho (2) acorda e termina. A partir daqui estão em execução os processos (1) e (3).

    Código:
    printf( "\n\nfilho : %d pais : %d\n\n", getpid(), getppid() );
    exit( 1 );
    O processo (1) acorda, executa e termina a execução. A partir daqui só
    está em execução o processo (3).

    Código:
    printf( "\n\n" );
    execlp( "ps", "ps", "l", 0 );
    
    O processo (3) acorda, executa e termina.

    Código:
    printf( "\n\nacorda du ptfilho\n\n" );
    printf( "ptfilho : %d pais : %d\n\n", getpid(), getppid() );
    exit( 2 );
    
     
    Última edição: 28 de Maio de 2009

Partilhar esta Página