Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: donself en 20 Mayo 2016, 18:49 pm



Título: Duda para programar Arbol de Procesos en C - OS Linux
Publicado por: donself en 20 Mayo 2016, 18:49 pm
Hola amigos.

Estoy realizando un proyecto sobre procesos en Unix, usando el lenguaje C.
EL proyecto consiste en representar un arbol de procesos usando las funciones fork(), wait(), exit().

La salida de mi programa me debe quedar:

1. Father:Pid1 - Hello
2. Children1:Pid2 - Hello
3. GrandChildren1.1:Pid3 – Hello and Goodbye
3. GrandChildren1.2:Pid4 – Hello and Goodbye
4. Children1:Pid2 - Goodbye
6. Children2:Pid6 - Hello
7. GrandChildren2.1:Pid7 – Hello and Goodbye
8. Children2:Pid6 - Goodbye
9.  Father:Pid1 - Goodbye

 este es el arbol:

https://www.solidfiles.com/v/n5QWvzwKdvw5M (https://www.solidfiles.com/v/n5QWvzwKdvw5M)

Esta salida la entiendo.
He programado el siguiente codigo para los inicios de los procesos, pero no se como hacer que terminen los procesos, siempre se me riegan:

Código:
main() {

    if(fork())
    {
        // 1
        printf("1. Father:Pid1 - Hello\n");
        if(fork())
        {
            // 2
            printf("2. Children1:Pid2 - Hello\n");
            if(fork())
            {
                // 4
                printf("3. GrandChildren1.1:Pid3 - Hello and GoodBye\n");
            }
            else{}

            wait(1);

            if (fork())
            {
                 printf("3. GrandChildren1.2:Pid4 - Hello and GoodBye\n");
            }
            else {}
        }
        else
        {
            printf("4. Children1:Pid2 - GoodBye\n");
        }
    }
    else{
        if(fork())
        {
            // 3}
            printf("6. Children2:Pid6 - Hello\n");
            if (fork())
            {
                printf("6. GrandChildren2.1:Pid7 - Hello and GoodBye\n");
            }
            else{}
    }
    else{}
    }

    pause();
    return 0;
}

Por ejemplo, no se como terminar el Pid2 y veo que cuando imprima los 2 nietos, debo hacerlo.

Como podria hacerlo o que debo entender?

saludos  gracias
Donny