在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
根据该链接,你不应该这样做。