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

Problema sobre processo pai e filho

Discussão em 'Programação' iniciada por Ryo Hazuki, 5 de Abril de 2008. (Respostas: 11; Visualizações: 2995)

  1. Ryo Hazuki

    Ryo Hazuki Power Member

    Escreva um programa que lance um processo filho. O processo filho deverá imprimir a
    frase “Eu sou o filho, o meu PID é xxx e o do PAI é yyy". Por outro lado o pai deverá
    imprimir a seguinte mensagem “Eu sou o pai, o meu PID é aaa e o do filho é bbb". Em
    ambos os casos xxx, yyy, aaa e bbb deverão ser os valores correctos.

    Alguém sabe fazer isto em shell script .c?
     
  2. doginthefog

    doginthefog Power Member

    Shell script .c?!? Não queres dizer antes em C?

    Experimenta as funções fork() e getpid() (prototipadas em unistd.h e sys/types.h).
     
  3. paperless

    paperless Power Member

    Última edição: 5 de Abril de 2008
  4. Usas o fork() para criar o novo processo. Depois disto, usas o getpid() para verificar o PID do processo pai. Se for 0, é o processo ai, senão é o processo filho. :)
     
  5. slack_guy

    slack_guy Power Member

    Aqui vai uma solução (se percebi o que pretendes):

    Código:
    #!/bin/sh
    # FICHEIRO: paifilho.sh
    
    if [ -n "$1" ]; then
        FILHO=$$
        PAI=$PPID
        echo "PAI: o meu PID e' $PAI e o do meu Filho e' $FILHO"
        echo "FILHO: o meu PID e' $FILHO e o do meu Pai e' $PAI"
        exit
    fi
    ($0 1)
    
    Output:
    Código:
    [[email protected]]: paifilho.sh
    PAI: o meu PID e' 4371 e o do meu Filho e' 4372
    FILHO: o meu PID e' 4372 e o do meu Pai e' 4371.
    
     
    Última edição: 5 de Abril de 2008
  6. Ryo Hazuki

    Ryo Hazuki Power Member

    Obrigadão a todos por me ajudarem.
    slack_guy, acho que é isso mesmo.
    Ainda vou programar mais um bocadito se arranjar mais soluções posto aqui.
     
  7. Ryo Hazuki

    Ryo Hazuki Power Member

    Reparei agora que não escrevi bem o que queria. O que eu queria dizer é que queria um shell script escrito em C. Ou seja, é tipo o que o slack_guy fez, mas o nome do ficheiro tem do ser do tipo nome_do_ficheiro.c, em vez de ser nome_do_ficheiro.sh
     
  8. Acho que estás um bocado confuso... Shell script e C são coisas diferentes. Se o que tu queres é um nome_do_ficheiro.c, isso é C, não é Shell script.


    De qualquer forma, para fazeres isso, fazes como eu já disse no meu post anterior. ;)
     
  9. Ryo Hazuki

    Ryo Hazuki Power Member


    Boas Mr. Brightside, acho mesmo que confundi um bocado as coisas.
    Então o fork() segundo andei aqui a ler, se devolver 0 é o filho, senão é o pai.
    Mas depois surge uma dúvida, como é que depois utilizo o getpid()? Ele devolve o PID certo? Mas depois como sei se é o PID do pai ou do filho?
     
  10. A partir do momento em que usas o fork() passas a ter dois processos. O processo filho vai retornar 0 e o processo pai vai retornar o PID do processo filho. Depois só tens de fazer algo do tipo:

    Código:
    pid = fork();
    if(result) /* Código do processo pai */
    else /* Código do processo filho */
    Para acederes ao PID do pai usas a função getppid() e para acederes ao PID do próprio processo usas a função getpid().

    Se tiveres alguma dúvida podes consultar as man pages destas funções:

    http://www.hmug.org/man/2/fork.php
    http://www.hmug.org/man/2/getpid.php
    http://www.hmug.org/man/2/getppid.php

    ;)
     
  11. JuSt_Me_AnD_yOu

    JuSt_Me_AnD_yOu What is folding?

    Eu tambem vou começar vir aqui perguntar as soluções dos TPC's de SO. Ainda por cima este que é um exemplo academico que aparece facilmente no google..
    Usas a função getpid() e getppid() para ir buscar as PID do pai e do filho. Isto em C não é shell script
     
  12. paperless

    paperless Power Member

    Isso está no PDF que meti aqui cagado e cuspido...
     

Partilhar esta Página