c++ - 有没有办法阻止用户注册/使用他自己的信号处理程序并始终使用特定的处理程序?

标签 c++ c linux signals signal-handling

我的要求是: 我的工具中有一个信号处理程序,它在某个特定间隔之间注册和使用(我正在使用计时器)。

现在,此信号处理程序不应允许在此处理程序注册后注册任何其他处理程序。 (但这个限制只是持续很短的时间,意味着在这段时间之后用户可以自由调用他自己的处理程序)

有什么办法可以做到这一点吗?

 sigset_t mask;
 struct sigaction sa;
 printf("Establishing handler for signal %d\n", SIG);
 sa.sa_flags = SA_SIGINFO;
 sa.sa_sigaction = handler; // This handler should override all handlers
 sigaction(SIG, &sa, NULL);
 sev.sigev_notify = SIGEV_SIGNAL;
 sev.sigev_signo = SIGUSR1;

注意:我的工具实际上是用 C++ 编写的,但是概念非常接近,因为更多人熟悉它,所以我也放了一个 C 标签,用 C++ 请随时要求更多说明(如果需要)

最佳答案

我假设您正在编写一个库。答案是否定的,不,不,!只需在文档中写明客户端代码不应为该信号注册处理程序。如果您不能相信您的库的用户不会破坏东西,那么您应该编写应用程序,而不是库。

无论您如何使您的处理程序优先于其他处理程序,如果其他代码做同样的事情,它就不会起作用。这是一篇非常相关的博客文章,介绍了想要制作“最顶层窗口”(有点像“最高优先级”信号处理程序)的 Windows 开发人员。

http://blogs.msdn.com/b/oldnewthing/archive/2011/03/10/10138969.aspx

附言在 Linux 中,没有什么好的方法可以在比进程级别更细的级别上赋予不同级别的权限。

P.P.S. 澄清一下,如果我的代码正在您的进程中运行,那么您无能为力。你已经输了。我的代码可以访问您的私有(private)成员变量、释放您的内存、关闭您的文件以及卸载您的库。 (您可以编写内核代码或在虚拟化中运行所有内容,但那会很糟糕。)

关于c++ - 有没有办法阻止用户注册/使用他自己的信号处理程序并始终使用特定的处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5801162/

相关文章:

c++ - __cdecl、__stdcall 和 __fastcall 的调用方式完全相同?

c - 用存储在数组中的字符替换字符串中的某些字符会插入垃圾

c - 将相等的字符串吸收到同一个指针上

c - 如何访问时间结构的字段

c++ - 嵌套结构初始化

c++ - 返回 std::string 作为 const 引用

c++ - 模板函数重载(泛型 vs 模板模板类型)选择正确的重载

linux - Jetson TK1 上的 vanillaXarm 错误,XiApi 安装

linux - 使用 alpine 源代码,为什么我无法源代码或 "."我的 env 文件?

linux - 如何运行命令,该命令在后台执行另一个运行脚本的终端