Ayuda con procesos en C

Iniciado por ZedGe, 12 Abril 2013, 21:21 PM

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

ZedGe

Tengo el siguiente código hecho en linux:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
  int i,n;
  pid_t pid;
  int status;

  if (argc < 2) {
    fprintf(stderr,"fork1 <valor entero>\n");
    return -1;
  }
  n = atoi(argv[1]);

  for(i=0;i<n-1;i++) {
 
    pid = fork();
    if (pid == 0) {
      printf("Hijo con PID:%i y papa:%i ID HIJO: %i\n",getpid(),getppid());


    }
    else {
      printf("Papa con PID:%i con hijo %i\n",getpid(),pid);
      wait(&status);
      exit(0);
    }
  }
}



Este código me crea N procesos, es decir si ingreco ./main.out 3 me creará 3 procesos.
mi problema, es que necesito que cada proceso tenga una ID dada por mi, aparte de la propia que se crea, es decir que de los 3 procesos, cada uno tenga una id del 0 al 2, y que imprima esa ID al pasar por el proceso.

Espero puedan ayudarme, gracias

naderST

La idea es que un proceso cree N procesos correcto? Recuerda que fork() duplica el código del proceso padre y en el proceso hijo continúa la ejecución donde quedó el proceso padre. En tu caso tus procesos hijos también van a crear procesos hijos porque no llamas a exit inmediatamente al hacer el printf. Corre tu código con N = 2 y te creará tres procesos.

Otra cosa, una vez corregido lo que te mencioné anteriormente, dejando el else dentro del for, es decir, el segmento de código que ejecutará el padre los procesos se crearan secuencialmente, ejemplo: El padre crea 1 proceso y espera a que este terminé para crear el siguiente.

ZedGe

Perdón si me explique mal, la idea es que funcione como una cola, es decir el proceso padre crea un hijo, luego ese hijo crea otro hijo. Quedando una especie de fila de procesos.

Necesito ponerles un ID para luego crear un buscador y que un pipe me diga en que posición esta.

rir3760

Cita de: ZedGe en 12 Abril 2013, 21:21 PMTengo el siguiente código hecho en linux [...]
Lo primero que debes hacer es seguir todas las indicaciones de naderST .

Cita de: ZedGe en 12 Abril 2013, 21:21 PMmi problema, es que necesito que cada proceso tenga una ID dada por mi, aparte de la propia que se crea, es decir que de los 3 procesos, cada uno tenga una id del 0 al 2, y que imprima esa ID al pasar por el proceso.
Utiliza el valor del contador "i". En el caso de los hijos estará en el rango 0 a N-2 y en el caso del padre sera igual a N-1.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language