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

sae*_*edn 11 signals history ipc

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

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

CL.*_*CL. 13

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

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

  • @saeedn 为什么不使用 SIGTERM 进行干净的进程关闭?这就是它的用途。许多其他服务器使用 SIGHUP(仅在交互式进程中才有意义)作为重新加载配置文件的信号,因此您可能会考虑这一点。 (2认同)

Gil*_*il' 6

信号只提供一种原始的通信方式。特别是,无法向它们附加任何信息。接收者只知道信号编号,而不知道发送者的身份。多个信号可以合并为一个。鉴于所有这些限制,信号没有那么多有用的用途。

对于更复杂的目的,请使用更复​​杂的交互方式,例如管道或套接字。