struct sigaction psa;
He permitido que mi manejador de la señal en la función principal como se muestra a continuación:Habilitar un manejador de señales usando sigaction en C
memset (&psa, 0, sizeof (psa));
psa.sa_handler = pSigHandler;
sigaction (SIGALRM, &psa, NULL);
sigaction(SIGVTALRM, &psa, NULL);
sigaction(SIGPROF, &psa, NULL);
Mi manejador de la señal es la siguiente:
static void pSigHandler(int signo){
printf("Pareint signum: %d", signo);// debug
switch (signo) {
case SIGALRM:
printf("P SIGALRM handler");//debug
break;
case SIGVTALRM:
printf("P SIGVTALRM handler");//debug
break;
case SIGPROF:
printf("P SIGPROF handler");//debug
break;
default: /*Should never get this case*/
break;
}
return;
}
Ahora mi pregunta puede ser obvia para algunas personas, ¿por qué no veo las líneas de depuración impresas cuando ejecuto esto? De hecho, nada fue impreso. Muchas gracias por ayudarme a entender esto. Lo estoy ejecutando en Linux, utilicé Eclipse para programar.
He intentado agregar fflush (stdout); Todavía no imprimí nada, Comenté otros códigos en mi programa, por lo que se ve más o menos lo mismo que arriba, simplemente sin el bucle infinito. ¿Algunas ideas? Gracias Tom. – txs
En mi ejemplo de código, fflush hace la diferencia entre imprimir o no. Creo que tal vez la aplicación no está recibiendo tus señales? ¿Has probado el mío? Creo que esto podría ser un comportamiento indefinido de todos modos, el enlace que puse en la parte inferior tiene algo de información que explica que se supone que debes hacer ciertas cosas allí ... Debe estar en los documentos de tu sistema. –
También menciona que eliminó el bucle infinito --- Si no está allí, el código se cerrará y los controladores de señal desaparecerán ... Debe bloquear y esperar las señales ... –