【问题标题】:Is there any way to create a user defined signal in Linux?有没有办法在 Linux 中创建用户定义的信号?
【发布时间】:2011-04-21 08:38:42
【问题描述】:

有没有办法在 Linux 中创建用户定义的信号?我的信号(信号编号)不应与任何现有的信号编号匹配。

换句话说,我想创建自己的独特信号,它将被我的处理程序注册和捕获。

有可能吗?如果是,怎么做?

提前致谢。

【问题讨论】:

    标签: c linux signals


    【解决方案1】:

    SIGRTMINSIGRTMAX(这些通常不是常量,而是扩展为在运行时评估的函数的宏)可用于您喜欢的任何用途,SIGUSR1SIGUSR2 也是如此。前者有额外的实时排队支持;后者没有。只需选择一个即可使用。

    【讨论】:

      【解决方案2】:

      你可以用特殊的信号编译你自己的内核:)

      【讨论】:

        【解决方案3】:

        您不能添加或注册自己的 SIGWHATEVER。

        sigset_t,它是固定大小的。请参阅valid_signal() Beartraps。

        【讨论】:

        • 你从哪里得到这个valid_signal( )?我找不到任何手册页。
        • @kingsmasher1:valid_signal() 是 Linux 内核中的一个函数,如果信号小于信号的数量,则返回 true。它被 kill() 系统调用之类的东西用来阻止你做一些事情,比如定义你自己的信号。
        【解决方案4】:

        USR1USR2 信号是为用户定义的目的而设计的。

        【讨论】:

        • 但这是预定义的。信号编号不会是唯一的,对吧?
        【解决方案5】:

        你可以使用 USR1 和 USR2 来做这种事情。

        如果这还不够,您可以通过让应用程序监听外部应用程序可以向其发送消息的套接字来模拟类似信号的行为。

        【讨论】:

        • 但是在这种情况下,我们不能将它注册到信号处理程序中。我们可以吗?因为我希望当这个信号被计时器使用时,这个信号 no 应该是唯一的,而不是与任何现有信号发生冲突。所以socket方法是不可行的。
        • 如果它完全在你的程序中,你不需要使用信号。您可以实现一个简单的消息传递系统并使用它。信号最适合用于进程之间的异步通信。
        • Noufal,不能由 POSIX 计时器 timer_create 使用。
        • 我知道。你必须自己实现一些东西。
        猜你喜欢
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        • 2016-08-25
        • 2021-10-05
        • 2010-10-23
        • 2020-02-26
        • 1970-01-01
        相关资源
        最近更新 更多