Creacion de procesos con fork

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
chonico
Forista Nuevo
Forista Nuevo
Mensajes: 6
Registrado: Lun Oct 25, 2010 11:09 am

Creacion de procesos con fork

Mensaje por chonico » Dom Jun 24, 2012 11:50 pm

Hola buenas noches a todos
Se algo de creación de procesos hijos y padres con fork, pero
al encontrarme con este ejercicio no sé como comenzar,
haber si hay alguien que me pueda ayudar o recomendar como
hacerlo.

Imagen
Avatar de Usuario
hipersayan_x
Forista Legendario
Forista Legendario
Mensajes: 1905
Registrado: Vie Abr 27, 2007 7:00 am
Contactar:

Re: Creacion de procesos con fork

Mensaje por hipersayan_x » Lun Jun 25, 2012 12:57 am

chonico escribió:pero al encontrarme con este ejercicio no sé como comenzar
Indicando el lenguaje de programación.
Desarrollo en Qt: Qt Developer Network
Mis proyectos: github | SourceForge.net
chonico
Forista Nuevo
Forista Nuevo
Mensajes: 6
Registrado: Lun Oct 25, 2010 11:09 am

Re: Creacion de procesos con fork

Mensaje por chonico » Lun Jun 25, 2012 1:56 am

hipersayan_x escribió:
chonico escribió:pero al encontrarme con este ejercicio no sé como comenzar
Indicando el lenguaje de programación.
En C
chonico
Forista Nuevo
Forista Nuevo
Mensajes: 6
Registrado: Lun Oct 25, 2010 11:09 am

Re: Creacion de procesos con fork

Mensaje por chonico » Mar Jun 26, 2012 10:55 am

El pseudocodigo quedaria algo parecido a esto, a falta de ponerle los printf:

Código: Seleccionar todo

pid=fork();  //crea el Padre1
  if(pid != 0)
     fork(); //creo que crea el hijo1 y Padre2
     ??
     for(i=0,i<2,i++) // crea hijo2 y hijo3
        fork();
     finpara;
  sino(pid==0)
  ??
  finsi;
Me faltan lineas donde he puesto los ??...
Avatar de Usuario
hipersayan_x
Forista Legendario
Forista Legendario
Mensajes: 1905
Registrado: Vie Abr 27, 2007 7:00 am
Contactar:

Re: Creacion de procesos con fork

Mensaje por hipersayan_x » Mar Jun 26, 2012 4:04 pm

2 detalles a tener en cuenta:
  • fork devuelve 3 valores posibles: -1 (error), 0 (proceso hijo) y 1 (proceso padre).
  • fork crea una copia exacta del programa padre (en el mismo punto donde estaba) y lo trata como hijo.
por lo tanto el código quedaría algo así:

Código: Seleccionar todo

/* Abuelo */
switch (fork())
{
    case -1:
        /* Código de error */
    break;

    case 0:
        /* Padre 1 */
        switch (fork())
        {
            case -1:
                /* Código de error */
            break;

            case 0:
                /* Código Hijo 1 */
            break;

            default:
                /* Código Padre 1 */
        }
    break;

    default:
        /* Padre 2 */
        switch (fork())
        {
            case -1:
                /* Código de error */
                break;
            case 0:
                /* Código del Hijo 2 */
                break;
            default:
                switch (fork())
                {
                    case -1:
                        /* Código de error */
                        break;
                    case 0:
                        /* Código del Hijo 3 */
                        break;
                    default:
                        /* Código Padre 2 */
                }
        }
}
También puede que haya que agregar un wait después de cada switch(fork()).
Desarrollo en Qt: Qt Developer Network
Mis proyectos: github | SourceForge.net
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje