SIGUSR1和SIGUSR2之间的区别

Rav*_*erg 6 c unix signals

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

Jea*_*nès 9

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

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

  • 因此,执行“kill -USR2 <pid>”实际上不会杀死进程,对吗? (2认同)
  • @Cristy否默认情况下,信号被设计为杀死接收器(某些特定信号除外),并且将一些基本语义附加到它们上,以使应用程序协调一致地运行,但USR1和USR2除外,这保证了系统永远不会发送它们本身并没有附加特定的语义。 (2认同)

del*_*ium 5

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

还有就是一个非常好的例子在这里.您只关注信号的创建和处理.请注意这两个SIGUSR1SIGUSR2由同一个处理器的处理方式,但你可以给他们不同的含义.