在 C 语言的信号处理程序和程序之间共享数据

Sharing data between Signal Handler and Program in C

提问人:FourierFlux 提问时间:11/3/2023 最后编辑:ShawnFourierFlux 更新时间:11/3/2023 访问量:65

问:

如何在信号处理程序和运行程序的主进程之间共享数据?

从搜索来看,这似乎是不可能的,但这不可能是正确的,因为它会使信号变得毫无意义。

C Linux 多线程信号

评论

0赞 Shawn 11/3/2023
您是否仅限于严格的 C 标准,还是在有更多选择的 POSIX 环境中?
0赞 Barmar 11/3/2023
通常的方法是使用全局变量。
1赞 Eugene Sh. 11/3/2023
使用全局变量。wiki.sei.cmu.edu/confluence/display/c/......volatile sig_atomic_t
0赞 FourierFlux 11/3/2023
如何防止处理程序中断 reas/write 请求?使用的原子变量?
0赞 Andrew Henle 11/3/2023
@FourierFlux 通常,您无法阻止信号中断任何通话。如果您使用并设置了该标志,则可以在 POSIX 系统上重新启动某些调用。无论是否设置了该标志,某些呼叫都会被打断。更令人担忧的是信号处理程序,它需要共享数据 - 信号处理程序是处理任何大量数据的非常糟糕的地方,因为它们与进程的其余部分完全异步运行。信号处理程序也只能调用异步信号安全函数,这大大限制了它们。sigaction()SA_RESTARTSA_RESTART

答: 暂无答案