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

sistemas operativos-processos-Fork

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

  1. 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: 31 de Maio de 2009
  2. Baderous

    Baderous Banido

    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.
     
  3. 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: 29 de Maio de 2009
  4. Baderous

    Baderous Banido

    Parabéns, acabaste de lhe dar o trabalho feito. [​IMG]
     

Partilhar esta Página