elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Señales, fork se detiene para luego seguir su ejecucion con una señal.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Señales, fork se detiene para luego seguir su ejecucion con una señal.  (Leído 1,581 veces)
rul3s

Desconectado Desconectado

Mensajes: 7



Ver Perfil
Señales, fork se detiene para luego seguir su ejecucion con una señal.
« 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?


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Emular MultiHilos (multithread) Sin Fork (FAKE FORK) « 1 2 »
PHP
OzX 14 8,943 Último mensaje 27 Marzo 2009, 00:24 am
por OzX
Señal wifi universidad a unos 800mtros, la mejor para amplificar señal
Materiales y equipos
zolio 6 9,895 Último mensaje 16 Octubre 2009, 15:51 pm
por motocros_elche
Seguir continuando el script luego de un comando RUN?
Ingeniería Inversa
.:UND3R:. 3 2,608 Último mensaje 3 Septiembre 2011, 20:15 pm
por apuromafo CLS
Exception detiene la ejecucion
.NET (C#, VB.NET, ASP)
d91 0 1,589 Último mensaje 7 Octubre 2015, 14:50 pm
por d91
Ayuda con fork() y señales SIGUSR1
Programación C/C++
murrayxaiyan 2 2,533 Último mensaje 3 Mayo 2017, 23:32 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines