Estoy empezando a aprender algo de C y mientras estudio la horquilla, las funciones de espera obtuve una salida inesperada. Al menos para mi.¿Cómo usar Fork() para crear solo 2 procesos secundarios?
¿Hay alguna manera de crear solo 2 procesos hijos del padre?
Aquí mi código:
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
/* Create the pipe */
int fd [2];
pipe(fd);
pid_t pid;
pid_t pidb;
pid = fork();
pidb = fork();
if (pid < 0)
{
printf ("Fork Failed\n");
return -1;
}
else if (pid == 0)
{
//printf("I'm the child\n");
}
else
{
//printf("I'm the parent\n");
}
printf("I'm pid %d\n",getpid());
return 0;
}
y aquí está mi producción:
I'm pid 6763
I'm pid 6765
I'm pid 6764
I'm pid 6766
Por favor, ignore la parte de tubo, no he llegado tan lejos. Solo intento crear solo 2 procesos secundarios, por lo que espero que 3 "I'm pid ..." produzca solo 1 para el padre, que haré esperar y 2 procesos secundarios que se comunicarán a través de un conducto.
Avísame si ves dónde está mi error.
'tenedor (2)' es a la vez muy simple y una de las llamadas más incomprendidos en la API de Unix. Solo mira la barra lateral "Relacionada". ¿Hay alguna razón particular por la que desee comunicación entre dos niños y no entre el padre y el niño? – dmckee
Para la llamada fork() ¿por qué está buscando pid == 0? ¿Cómo sé cuál es el padre y cuál es el niño? – TwilightSparkleTheGeek
@TwilightSparkleTheGeek 'man fork' states: VALOR DEVUELTO En caso de éxito, el PID del proceso secundario se devuelve en el elemento primario y 0 se devuelve en el elemento secundario. En caso de error, -1 se devuelve en el elemento principal, , no se crea ningún proceso hijo y errno se configura de manera apropiada. – mimoralea