SIGUSR1和SIGUSR2之间的区别

时间:2014-12-10 14:35:12

标签: c unix signals

阅读手稿中的信号,我遇到了信号表,看到有两个已定义的信号,用于使用SIGUSR1和SIGUSR2。 这两者有什么区别吗? 如果是这样,我何时应该选择使用另一个? 如果没有差异,为什么两个信号服务于同一目的?

2 个答案:

答案 0 :(得分:9)

根据自己的需要,您有两个信号。保证系统永远不会将它们传递给您的进程,因此您可以将所需的任何语义放在它们上面。为什么两个?完全随意;只有一个肯定会吝啬,所以他们给了我们两个,但他们可以给予更多。这是与信号通信有关的任意自由度。

我认为大部分时间这都足够了。我个人从来没有使用过多于同时用户定义的...例如,这样的信号用于警告服务器正在执行某些消耗任务,特别是“紧急”执行某些操作:读取内容中的内容通信通道,停止当前任务等。如果您需要两个以上的用户定义信号,这可能意味着您设计糟糕并且过度使用它们。请记住,使用捕获信号会在您自己的代码中引入一些并发,这会对其设计产生严重影响。

答案 1 :(得分:5)

就我而言,他们之间没有区别(除了他们的价值观)。两者都保留给用户,他们必须选择如何使用它们。它们可能起到同样的作用(发出信号)但它们可以用来发出不同的信号。

有一个很好的例子here。您只关注信号的创建和处理。请注意,SIGUSR1SIGUSR2都由同一个处理程序处理,但您可以赋予它们不同的含义。