processos Zombi

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:
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:
Back
Topo