Si yo ejecuto esto:
Código C:
Ver original#define HIJOS 3
int main()
{
int padre = getpid();
printf("%d <- principal\n", padre
);
for(int i=0; i<HIJOS; i++)
{
if(!fork())
{
break;
}
}
if(getppid() == padre) // Hijos.
{
printf("%d <- hijo\n",getpid
()); }
}
Obtengo esto:
Código BASH:
Ver original29387 <- principal
29389 <- hijo
29387 <- principal
29387 <- principal
29390 <- hijo
29387 <- principal
29391 <- hijo
Es decir, en el if únicamente entran los procesos hijos.
Salvo que estés creando otros procesos antes de llegar aquí no se me ocurre cómo te puede estar fallando.