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进行编程。
答案 0 :(得分:13)
#include <stdio.h>
#include <signal.h>
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)
尝试使用C-z
我甚至不确定在信号处理程序中使用stdio是否安全。
更新:http://bytes.com/topic/c/answers/440109-signal-handler-sigsegv
根据该链接,您不应该这样做。