Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Señales en C/C++

Estas en el tema de Señales en C/C++ en el foro de C/C++ en Foros del Web. Hola, tengo una duda, tengo 2 programas, uno envia una señal SIGUSR1 al otro con kill(), este al recibirla debe ejecutar una funcion. El problema ...
  #1 (permalink)  
Antiguo 25/11/2010, 23:06
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Señales en C/C++

Hola, tengo una duda, tengo 2 programas, uno envia una señal SIGUSR1 al otro con kill(), este al recibirla debe ejecutar una funcion.


El problema es que solo me funciona cuando utilizo pause() para que el programa se quede pausado esperando la señal, si quito el pause(), es como si nunca llegara la señal, porque la funcion nunca se ejecuta, mi duda es si hay algun problema con el codigo o en realidad me falta agregar algo mas.



while(1) {
kill (pid, SIGUSR1);
sleep(30);
}

--------------------------------------------------------

signal (SIGUSR1, realizarFuncion);

y la funcion es:

void realizarFuncion(int numeroSignal) {

...

}

/* Quisiera que funcione sin el pause, porque no puedo detener el proceso */
/* while (1) {
pause();
} */

----------------------------------------------------------

Tambien probado de esta forma:

struct sigaction gestionSignal;
sigset_t block_mask;
sigdelset (&block_mask, SIGUSR1);

gestionSignal.sa_handler = realizarFuncion;
gestionSignal.sa_mask = block_mask;
gestionSignal.sa_flags = SA_NODEFER;

sigaction (SIGUSR1, &gestionSignal, NULL);

---------------------------------------------------




Vuelvo a aclarar que con el pause() funciona perfectamente, bueno espero que me puedan ayudar, gracias!
  #2 (permalink)  
Antiguo 28/11/2010, 09:12
 
Fecha de Ingreso: noviembre-2010
Mensajes: 38
Antigüedad: 14 años
Puntos: 2
Respuesta: Señales en C/C++

El código es correcto. Incluso lo he comprobado y a mi me va bien

Como sabes si se ha ejecutado la función? Tienes algún printf que te lo dice? Si es así, no olvides terminar con un \n, o hacer un fflush(stdout), de lo contrario no lo verás hasta que se llene el buffer de salida.

El código que he probado y funciona es:
Código C:
Ver original
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<signal.h>
  4.  
  5. void realizarFuncion(int numeroSignal)
  6. {
  7.   printf("Ejecutando realizarFuncion\n");
  8. }
  9.  
  10. main()
  11. {
  12.  
  13.   signal (SIGUSR1, realizarFuncion);
  14.  
  15.   while (1)
  16.   {
  17.   }
  18.  
  19. }
  #3 (permalink)  
Antiguo 29/11/2010, 12:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 163
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Señales en C/C++

El problema es que con el while sin hacer nada dentro estas ocupando todo el proceso sin darle tiempo a que ejecute el jump cuando recibe la señal, la unica forma es un sleep mas grande o que realmente haga algo dentro del while.

Etiquetas: señales
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:00.