【发布时间】:2013-06-19 19:06:03
【问题描述】:
如何使用 signal(3) 为正在运行的操作系统上可用的 ALL 信号注册信号处理程序?
我的代码如下所示:
void sig_handler(int signum)
{
printf("Received signal %d\n", signum);
}
int main()
{
signal(ALL_SIGNALS_??, sig_handler);
while (1) {
sleep(1);
};
return 0;
}
【问题讨论】:
-
在
for循环中,从1到31? -
每个系统都有一个信号列表。请参阅
/usr/include/signal.h没有一个标准宏可以用来表示所有这些宏。加。你不能把他们都困住,例如SIGKILL。 -
那么你应该检查你是哪个平台......但我认为你不需要它们,SIGINT、SIGUSR1/2 和更多应该足够了。顺便提一句。在 /usr/include/bits/signum.h 你可以找到所有的描述。
-
您不能在信号处理程序中使用 printf()。 (它是不可重入的)
-
@R 如果在信号处理程序中执行 printf 时信号到达会发生什么? (提示:坏事)在信号处理程序中调用 printf 是不安全的,即使在这个简单的程序中也是如此。
标签: c linux unix signal-handling