Problema sobre processo pai e filho

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?
 
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?

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).
 
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. :)
 
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:
[me@mybox]: 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:
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
 
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
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. ;)
 
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. ;)


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?
 
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?
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

;)
 
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
 
Back
Topo