Saltar al contenido
Underc0de /foro

[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.

Avatar de chonico
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.

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

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

7 respuestas

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

Avatar de chonico
Cita de: Cronos en Junio 25, 2012, 08:51:34 AM
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
Los enlaces son solo para miembros. Registrate o iniciá sesión

Avatar de Pr0ph3t
Cita de: chonico en Junio 25, 2012, 08:56:56 AM



Perdón no se que le pasara, pero yo si la veo, pero aqui os dejo el enlace donde he subido la imagen
Los enlaces son solo para miembros. Registrate o iniciá sesión

Forbidden
Twitter: @The_Pr0ph3t
[email protected]

Avatar de Cronos
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.-

Avatar de Expermicid
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

Los enlaces son solo para miembros. Registrate o iniciá sesión
Los enlaces son solo para miembros. Registrate o iniciá sesión

Saludos

Avatar de chonico
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 ??...

Avatar de Expermicid
Cita de: chonico en Junio 26, 2012, 05:57:10 AM
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

Grupo de WhatsApp