为什么只有两个用户定义的信号?


11

在linux系统中定义的信号列表中,有两个信号称为“用户定义的信号”(SIGUSR1SIGUSR2)。在特定情况下会引发或捕获其他信号,但是SIGUSR留给用户应用程序使用。

那么为什么只有两个信号呢?

Answers:


13

从历史上看,Unix的只有这两个信号,但现代系统具有实时信号SIGRTMIN...... SIGRTMAX

由于信号API的古怪和不可移植的语义,几乎没有用例比其他通信机制(例如管道)更喜欢信号。因此,从未认为分配新的信号号是必要的。


谢谢。就我而言,我处理SIGUSR1进行重新配置。这意味着,当管理员想要更改正在运行的进程的配置时,它将更改配置文件,然后将SIGUSR1发送给我的PID(更方便在此处使用管道)。我使用SIGUSR2进行干净的进程关闭。除了这两个信号外,我没有必要使用其他信号,但是可以通过处理其他用户定义的信号来实现某些运行时功能!
saeedn 2012年

2
@saeedn为什么不使用SIGTERM来关闭进程?这就是它的目的。许多其他服务器都使用SIGHUP(在交互过程中才有意义)作为重新加载配置文件的信号,因此您可以考虑这样做。
Random832

@ Random832您说得对,我知道您说什么。但是我一直在思考的问题是,如果我用尽了31种信号选择怎么办?
saeedn 2012年

1
在哪里可以获得有关SIGRTMIN ... SIGRTMAX信号的更多信息?使用时在哪里定义?
Strubbl

6

信号仅提供原始的通信方式。特别是,无法将任何信息附加到它们。接收者仅知道信号号,而不知道发送者的身份。可以将多个信号混合为一个。考虑到所有这些限制,信号没有太多有用的用途。

为了更复杂的目的,请使用更复​​杂的交互方式,例如管道或插座。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.