Pregunta: ¿Cuántos hilos habrá al terminar ese bucle?
Respuesta: 4
Explicación:
- En la primera iteración tendremos dos, el padre (P) y un hijo (H1)
- En la segunda iteración tendremos 4 ( P crea 1 y H1 crea otro)
Luego tu intento de crear únicamente N hijos no funciona porque estás creando un número de hijos desproporcionado.
Por otro lado, llamar a fork hace que el hijo tenga una copia de la memoria del padre y a partir de ese momento cada uno usa su propia memoria... almacenar en un arreglo los id no parece una buena idea porque cada proceso va a almacenar un arreglo diferente.
Si el número de hijos es una constante puedes probar algo tal que:
Código C:
Ver originalif( fork() )
if( fork() )
if( fork() )
return; // Aqui solo llega el padre
funcion(); // Los 3 hijos ejecutan esto
También puedes embeber el código en un bucle... pero teniendo cuidado de crear procesos únicamente desde el padre:
Código C:
Ver original#define HIJOS 3
int main()
{
int padre = getpid();
for( int i=0;i<HIJOS;i++)
if( !fork() ) break;
if( getppid() == padre ) // Si el padre del proceso actual es el proceso principal estamos tratando con un hijo
}
Un saludo.