Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: rul3s en 19 Octubre 2013, 16:01 pm



Título: Señales, fork se detiene para luego seguir su ejecucion con una señal.
Publicado por: rul3s en 19 Octubre 2013, 16:01 pm
Hola gente!

Vereis, tengo una duda relativa a programacion C en Linux.
Necesito conseguir parar la ejecucion de un hijo (fork) hasta que el padre le envie una señal conforme puede continuar.

Tengo entendido que si al hijo le hago un pause(), en cuanto reciba una senyal, por ejemplo, SIGUSR1, reanudara su ejecucuion, pero no consigo que funcione.

El programa consiste exactamente en un padre > hijo > nieto1/nieto2, necesito que el nieto1 se espere a que nieto2 termine para poder continuar, este es mi codigo:

Código:
void sigusr1(int pidno){
  printf("Resume\n");
}

int main(void){
int net1_2=0, net1_1=0, fill1=0, pare=0, control, cont, len;
char cadena[55];

len = sprintf(cadena, "Pare: %d - Hola\n", getpid());
write(1, cadena, len);
signal( SIGUSR1, sigusr1);
fill1 = fork();

if(fill1==0){
len = sprintf(cadena, "Fill1: %d - Hola\n", getpid());
write(1, cadena, len);

net1_1 = fork();
if(net1_1==0){
len = sprintf(cadena, "Net1.1: %d - Hola\n", getpid());
write(1, cadena, len);
printf("Punt 1\n");
pause();
printf("Punt 5\n");
len = sprintf(cadena, "Net1.1: %d - Adeu\n", getpid());
exit(0);
}
printf("Punt 2\n");
net1_2 = fork();
if(net1_2==0){
len = sprintf(cadena, "Net1.2: %d - Hola\n Net1.2: %d - Adeu\n ", getpid(), getpid());
write(1, cadena, len); //El FD num 1 Correspon al STDOUT
printf("Punt 3\n");
exit(0);
}
printf("Punt 4\n");
wait(&control);
printf("Punt 4.1\n");
kill(net1_1,SIGUSR1);
len = sprintf(cadena, "Fill1: %d - Adeu\n", getpid());
exit(0);
}
printf("Punt 6\n");
wait(&control);
printf("Punt 7\n");
len = sprintf(cadena, "Pare: %d - Adeu\n", getpid());
write(1, cadena, len);

return 0;
}

Podeis echarme un cable?