在C中使用sigaction启用信号处理程序

struct sigaction psa; 

我在main函数中启用了我的信号处理程序,如下所示:

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

我的信号处理程序是这样的:

 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; } 

现在我的问题对某些人来说可能是显而易见的,为什么我在运行时看不到打印的调试行? 事实上,没有印刷任何东西。 非常感谢您帮助我理解这一点。 我在Linux上运行它,用Eclipse编程。

 #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; } 

因为你需要fflush(stdout)

试试Cz

我甚至不确定在信号处理程序中使用stdio是否安全。

更新: http : //bytes.com/topic/c/answers/440109-signal-handler-sigsegv

根据该链接,你不应该这样做。