Habilitar un manejador de señal usando sigaction en C

struct sigaction psa; 

He habilitado mi manejador de señales en la función principal como se muestra a continuación:

  memset (&psa, 0, sizeof (psa)); psa.sa_handler = pSigHandler; sigaction (SIGALRM, &psa, NULL); sigaction(SIGVTALRM, &psa, NULL); sigaction(SIGPROF, &psa, NULL); 

Mi manejador de señales es así:

 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 vi 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, usé Eclipse para progtwigr.

 #include  #include  static void pSigHandler(int signo){ switch (signo) { case SIGTSTP: printf("TSTP"); fflush(stdout); break; } } int main(void) { struct sigaction psa; psa.sa_handler = pSigHandler; sigaction(SIGTSTP, &psa, NULL); for(;;) {} return 0; } 

Porque necesitas fflush (stdout)

prueba con Cz

Sin embargo, ni siquiera estoy seguro de si es seguro usar stdio en un controlador de señales.

Actualización: http://bytes.com/topic/c/answers/440109-signal-handler-sigsegv

De acuerdo con ese enlace, no debes hacer esto.