Trás tiempo dedicado a otros menesteres vuelvo con algo de programación y como no, una duda

. La cuestión es la siguiente. Creo un programa que le paso como parámetro el número de hijos que se tendrán que crear,(proceso abuelo,padre,hijo,nieto...). El problema está en que cuando termino de crear todos los procesos, el último tiene que ir pasar un testigo a su padre avisando de que ha sido creado con éxito y que está preparado.El padre a su padre y así hasta el primer proceso... La cosa es que ando algo liado y no consigo que el último hijo trás crearse inicie la comunicación hacia arriba... Lueg tengo que mandar la señal SIGUSR1 hacia abajo pero eso de momento no me interesa. Hasta el momento tengo esto, pero le faltan cosas.
Código:
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
void manejador_ascendente(int,pid_t,int);
main(int argc,char * argv[])
{
pid_t pid_hijo,pid_patriarca;
int i,numero_de_hijos;
if(argc!=2)
{
printf("\n Numero incorrecto de parametros.");
printf("\n Debes pasar solamente un parametro.");
return 0;
}
if(atoi(argv[1])==0 && strcmp(argv[1],"0"))
{
printf("\n Has pasado como parametro una cadena.");
printf("\n Debes pasar un entero como parametro.");
return 0;
}
numero_de_hijos = atoi(argv[1]);
pid_patriarca = getpid();
printf("\n %d",pid_patriarca);
for(i=0;i<numero_de_hijos;i++)
{
switch(pid_hijo = fork())
{
case -1:
perror(" ");
exit(2);
case 0:
printf("\n Hijo recien creado numero %d con PID = %d y con PID del padre = %d",i+1,getpid(),getppid());
if (i == numero_de_hijos-1)
{
printf("\n Proceso %d enviando SIGUSR1 a %d", i+1, getppid());
kill (getppid(), SIGUSR1);
}
break;
default:
while(1);
pause();
}
}
}
void manejador_ascendente(int sig,pid_t pid_patriarca,int i)
{
if (pid_patriarca != getpid())
{
printf("\n Proceso %d Enviando SIGUSR1 a %d", i, getppid());
kill (getppid(), SIGUSR1);
}
else
{
}
}
Como ven no está completo... alguna sugerencia? Muchas gracias. Saludos.
P.D: El resultado debería ser algo así:
Código:
@ programa 3
Hijo 1 creado.
Hijo 2 creado.
Hijo 3 creado.
Hijo 3 listo.
Hijo 2 listo.
Hijo 1 listo.
Proceso padre listo.