这个问题更多是出于我的好奇心,而不是什么重要的事情。我想让我的代码至少在Windows和Mac上兼容。到目前为止,我已经了解到我应该基于POSIX来编写代码,这很好,但是...
Windows没有sigaction函数,所以使用signal?根据What is the difference between sigaction and signal?,signal存在一些问题。
Windows没有sigaction函数,所以使用signal?根据What is the difference between sigaction and signal?,signal存在一些问题。
如果两个SIGINT快速到达,则应用程序将以默认行为终止。有没有办法修复这个行为?这两个问题对于例如想要阻止SIGINT的进程有什么其他影响?我在使用signal时还会遇到其他问题吗?如何解决它们?
- 当当前处理程序正在执行时,signal()函数不会阻止其他信号到达;sigaction()可以阻止其他信号直到当前处理程序返回。
- signal()函数将信号动作重置为SIG_DFL(默认)几乎对所有信号都适用。这意味着signal()处理程序必须首先重新安装自身。它还在信号被检测到和处理程序重新安装之间打开了一个漏洞窗口,在此期间,如果第二个信号实例到达,则会发生默认行为(通常是终止,有时带有偏见-也称为核心转储)。
sigaction
的平台上,可以#define HAVE_SIGACTION
。然后,你可以检查该定义,如果未定义,则创建一个新的定义(#define my_signal signal
),否则使用sigaction
创建一个新函数(my_signal(...)
)。 - Some programmer dude