1

我知道,从信号处理函数中,sigaction()我应该只调用那些“异步安全”的函数。但为什么会这样?

4

1 回答 1

1

调用不安全的函数可能会导致未定义的行为。

开放组基本规范第 7 期(POSIX.1-2008)在处理“信号概念”时说:

[W] 当一个信号中断一个不安全的函数......并且信号捕获函数调用一个不安全的函数时,行为是未定义的。

至于为什么不安全的函数是不安全的,在给定的实现中可能有很多原因。

但是,该标准的先前版本,第 6 版 (POSIX.1-2004),暗示了某些实现的一个可能原因。该版本将异步信号安全功能描述为“可重入或不可被信号中断”。因此,考虑一个依赖静态数据来保持状态但在执行过程中被自身中断的函数——一旦控制权返回被中断的函数,该数据是否可信?

于 2017-09-27T20:26:01.863 回答