sistemas operativos-processos-Fork

ola pessoal!!!
como nao sou muito bom em c...vim pedir a vossa ajuda...eu tentei fazer este exercicio que me pediram fazer aki em ERASMUS(Romenia) mas so consigo fazer o 1...e so me falta esta cadeira para me ir embora...por favor ajudem... desde ja obrigado!!!

aki vai...

-1 pai cria dois filhos(exercicio feito por mim)

Código:
[COLOR=black]#include <stdio.h>[/COLOR]
[COLOR=black]#include <unistd.h>[/COLOR]
[COLOR=black]#include <stdlib.h>[/COLOR]
[COLOR=black]main()[/COLOR]
[COLOR=black]{[/COLOR]
[COLOR=black]int i;[/COLOR]

[COLOR=black]for(i=1; i<=2; i++) {[/COLOR]

[COLOR=black]if (fork() [/COLOR][COLOR=red]== [/COLOR][COLOR=black]0) {[/COLOR]

[COLOR=black]printf("processo [/COLOR][COLOR=red]FILHO [/COLOR][COLOR=black]%d vai terminar\n", getpid());[/COLOR]
[COLOR=black]exit(0);[/COLOR]
[COLOR=black]}[/COLOR]
[COLOR=black]printf("processo [/COLOR][COLOR=red]PAI [/COLOR][COLOR=black]%d vai terminar\n", getpid());[/COLOR]
[COLOR=black]}[/COLOR]
[COLOR=black]}[/COLOR]

2) 1 pai cria 1 filho e esse filho cria outro filho(neto) e termina?

3) 1 pai cria 2 filhos e 1 deles cria outro filho(neto)?
 
Última edição pelo moderador:
Já te respondi nesta thread a um exemplo muito parecido onde tens exemplos do que precisas de fazer para o exercício 2 e 3. Aqui não fazemos trabalhos de casa. Só tiramos dúvidas.
 
Resposta ao 2º

Código:
int main(void)
{
    pid_t pid,pid2;
    int aux,aux2;
    int status,status2;
    pid=fork();
    if (pid<0)
    {
        perror("Erro ao cria o processo\n");
        exit(-1);
    }
    else
    {
        if (pid > 0) /* Código do Pai */
        {
            printf("Pai\n");
            sleep(5);
            printf("Pai a sair\n");
            exit(5);
        }
        else /* Código do filho */
        {
            pid2=fork();
            if (pid<0)
            {
                perror("Erro ao cria o processo\n");
                exit(-1);
            }
            if (pid2 > 0)
            {
                printf("Filho 1\n");
                sleep(5);
                printf("Filho 1 a sair\n");
                exit(5);
            }else{/* filho 2*/
                printf("Filho 1\n");
                sleep(5);
                printf("Filho 1 a sair\n");
                exit(5);
            }
        }
        exit(0);
    }
}

Resposta ao 3º

Código:
int main(void)
{
    pid_t pid,pid2,pid3;
    int aux,aux2;
    int status,status2;
    pid=fork();
    if (pid<0)
    {
        perror("Erro ao cria o processo\n");
        exit(-1);
    }
    else
    {
        if (pid > 0) /* Código do Pai */
        {
            pid2=fork();
            if (pid<0)
            {
                perror("Erro ao cria o processo\n");
                exit(-1);
            }
            if(pid2>0)
            {
                printf("Pai\n");
                sleep(10);
                printf("Pai a sair\n");
                exit(10);
            }else/* Código do filho2*/
            {
                printf("Filho 2\n");
                sleep(10);
                printf("Filho 2 a sair\n");
                exit(10);                
            }
        }
        else /* Código do filho1  que cria um neto*/
        {
            pid3=fork();
            if (pid<0)
            {
                perror("Erro ao cria o processo\n");
                exit(-1);
            }
            if(pid3>0)
            {
                printf("Filho 1\n");
                sleep(5);
                printf("Filho 1 a sair\n");
                exit(5);
            }else/*neto*/
            {
                printf("neto 1\n");
                sleep(5);
                printf("neto 1 a sair\n");
                exit(5);
            }
        }
        exit(0);
    }
}
 
Última edição:
Parabéns, acabaste de lhe dar o trabalho feito.
handclap.gif
 
Back
Topo