【发布时间】:2011-11-27 19:00:14
【问题描述】:
我有以下代码。当我使用 gnu 扩展 (-std=gnu99) 编译它时,程序将在结束之前捕获 5 个 SIGINT(这是我所期望的)。在没有它的情况下编译 (-std=c99) 在第二个之后结束(并且只输出一行)。
我错过了什么?
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
int int_stage = 0;
int got_signal = 0;
void sigint(int parameter)
{
(void)parameter;
got_signal = 1;
int_stage++;
}
int main()
{
signal(SIGINT,sigint);
while(1)
{
if (got_signal)
{
got_signal = 0;
puts("still alive");
if (int_stage >= 5) exit(1);
}
}
return 0;
}
【问题讨论】:
-
您应该使用 sig_atomic_t,而不是整数来处理信号。如果我是你,我会避免这整个混乱,只使用 sigwait。
-
@EthanSteinberg 呃?根据 C 和 POSIX,函数的原型是
void (*func)(int))。 -
@Let_Me_Be:我相信 Ethan 指的是
got_signal,而不是信号处理程序的参数。 -
@Let_Me_Be 这是带有 sigwait 且没有忙于等待 ideone.com/6V0No