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:
Podeis echarme un cable?
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 [Seleccionar]
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?