[SOLUCIONADO] Ayuda con creacion de procesos con fork() en C

Iniciado por chonico, Junio 25, 2012, 08:39:12 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 25, 2012, 08:39:12 AM Ultima modificación: Octubre 28, 2013, 08:06:25 AM por Expermicid
Hola a todos

Estoy repasando ejercicios de procesos para prepararme un examen, y me encontrado con este
ejercicio que nunca llegue a poder resolverlo. Sé mas o menos lo fundamental en la creación de
procesos con fork() en C, pero para este ejercicio no se ni como empezar. Haber si hay alguien
que me pueda ayudar o que me oriente un poco para comenzarlo.

Hay os dejo una imagen del árbol de procesos del ejercicio.



Gracias de antemano, a quien me ayude y a los que no, también por molestaros en leer el post.

Disculpame, pero no puedo ver la imagen.. Revisa que la hallas colocado bien
Saludos,, Cronos.-

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
Disculpame, pero no puedo ver la imagen.. Revisa que la hallas colocado bien
Saludos,, Cronos.-

Perdón no se que le pasara, pero yo si la veo, pero aqui os dejo el enlace donde he subido la imagen
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta



Perdón no se que le pasara, pero yo si la veo, pero aqui os dejo el enlace donde he subido la imagen
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Forbidden
Twitter: @The_Pr0ph3t
[email protected]

Bien no se ve muy complicado, la verdad recien estoy viendo C y todavia no llego a usar fork. Tienes que resolverlo si o si con fork o puedes hacerlo como gustes? Porque seme ocurren varias formas de hacerlos con cadenas de procedimientos.
PD: Nose bien para que es fork si me explicas un poco una de esa saco una manera.
Saludos,, Cronos.-

Junio 25, 2012, 11:20:55 AM #5 Ultima modificación: Febrero 08, 2014, 05:02:18 PM por Expermicid
Cronos, fork es un funcion que crea un proceso hijo.

Crea una copia de sí mismo, que actúa como un "proceso hijo" del proceso originario, llamado "padre". Los procesos resultantes son idénticos, salvo que tienen distinto número de proceso (PID).

Te dejo un ejemplo chonico.

Código: c
pid_t pid = fork();
   int i;

   if(pid == 0)
   {
      /* Proceso hijo:
       * Cuando fork() devuelve 0, estamos en
       * el proceso hijo.
       * Aquí contamos hasta diez, uno cada segundo.
       */
      for(i=0; i < 10; i++)
      {
         printf("hijo: %d\n", i);
         sleep(1);
      }
      _exit(0); /* nota: exit en lugar de _exit */
   }
   else if(pid > 0)
   {
      /* Proceso padre:
       * Si no estamos en el proceso padre.
       * De nuevo contamos hasta diez.
       */
      for(i=0; i < 10; i++)
      {
         printf("padre: %d\n", i);
         sleep(1);
      }
   }
   else
   {   
      /* ha ocurrido un error. */
      fprintf(stderr, "no se ha podido bifurcar");
      exit(1);
   }


yo a esta funcion la estudie en sistemas operativos en mi carrera.

Aca te dejo donde saque el ejemplo para que sigas leyendo y otro documento que por ahi te sirve

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Saludos

Junio 26, 2012, 05:57:10 AM #6 Ultima modificación: Febrero 08, 2014, 05:02:44 PM por Expermicid
El pseudocodigo quedaria algo parecido a esto, a falta de ponerle los printf:

Código: c
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;



Creo que me faltan lineas donde he puesto los ??...

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
El pseudocodigo quedaria algo parecido a esto, a falta de ponerle los printf:

Código: text
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;



Creo que me faltan lineas donde he puesto los ??...

los printf era solo para ver lo que hace, si tu no lo necesitas no es necesario