为什么只应从信号处理程序调用异步安全函数?

时间:2017-09-22 00:02:25

标签: signals sigaction async-safe

我理解,从信号处理函数var input = 'this is a test string <a href="https://example.com" ui-link="https://example.com">example</a>, and this is another test string <a href="http://example2.com">example 2</a>.' var output = convertString(input); output should equal: 'this is a test string <a target="_blank" href="https://example.com" ui-link="https://example.com">example</a>, and this is another test string <a target="_blank" href="http://example2.com">example 2</a>.' 我应该只调用那些“异步安全”的函数。但为什么会这样呢?

1 个答案:

答案 0 :(得分:1)

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

Open Group Base Specifications Issue 7(POSIX.1-2008)在处理"Signal Concepts"时说:

  

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

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

然而,标准的先前版本第6期(POSIX.1-2004)暗示了某些实现的一个可能原因。该版本将异步信号安全功能描述为"either reentrant or non-interruptible by signals"。因此,考虑一个依赖于静态数据来保持状态但在执行中途自身中断的函数 - 一旦控制返回到被中断的函数,该数据是否可以被信任?