考虑以下代码:
#include <signal.h>
#include <stdio.h>
void catch ()
{
printf("hin");
}
int main()
{
struct sigaction act;
act.sa_handler = catch;
sigaction(SIGINT, &act, NULL);
for(;;);
return 0;
}
运行此程序时。当我第一次按下CTRL-C时;嗨">
但程序第二次退出时。这可能是什么原因
我想要的是程序每次发出信号时都能捕捉到信号。
如果不使用任何SA_FLAG来显式定义";在第一次捕捉到信号之后要做什么";,这应该是工作。
清除sigaction的内容,然后对其进行初始化。
memset(&act,0,sizeof(act)); // clear contents first
act.sa_handler = catch;
sigaction(SIGINT, &act, NULL);
请参阅,sigaction(2(。
此外,不要像Daniel指出的那样在信号处理程序中使用printf。参见信号安全(7(
如果要打印某些内容,或者只是在信号处理程序中执行某些操作,则必须使用信号安全函数。在您的情况下,您可以使用write((系统调用,而不是使用printf。请参阅写入(2(。
由,
write(1,"hin",3); // 1 means standard out.