gpt4 book ai didi

c++ - 在库中处理 Posix 信号

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:54 25 4
gpt4 key购买 nike

是否有可能以某种方式处理两次 Posix 信号?当进程在我正在编写的库中终止时,我需要执行一些操作。我这样做很简单:

signal(SIGSEGV, sig_handler);
signal(SIGABRT, sig_handler);
signal(SIGFPE, sig_handler);
signal(SIGINT, sig_handler);

这可行但不能完全接受,因为我的库的用户可能出于其他原因想要自己处理信号。我想我会因此而干涉。

是否有可能以某种方式处理我的 sig_handler 中的信号,然后“重新抛出”它,以便其他任何需要它的人都可以透明地使用它? “透明地”我还表示我不想要求用户提供一些“自定义回调”,因为我的库已经有一个定义的接口(interface),没有真正的标题。在进程终止的任何情况下,我都需要一些回调,为用户透明地安装并为用户透明地处理。有这样的东西吗?这个解决方案在 Linux 上运行就足够了。谢谢!

最佳答案

最好的选择可能是使用 sigaction 来获取当前回调并将您的回调放在中间。 This SO answer解释它。但是,如果应用程序在您之后设置它,您将根本看不到任何调用。

获取当前的:

struct sigaction sa;
sigaction(SIGINT, NULL, &sa);
...

设置你的:

struct sigaction sa;
...
sigaction(SIGINT, &sa, NULL);

在你的回调中你调用第一个。

关于c++ - 在库中处理 Posix 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35485104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com