问题
基于信号发送的进程间通信方式可靠吗???
信号查看(kill -l)
信号的分类
不可靠信号 (传统信号)
- 信号值在 [1, 31] 之间的所有信号
可靠信号 (实时信号)
- 信号值在 [SIGRTMIN,SIGRTMAX],即:[34,64]
- SIGRTMIN => 34
- SIGRTMAX => 64
信号小知识
信号 32 与信号 33 (SIGCANCEL & SIGSETXID) 被NPTL 线程库征用
NPTL => Native Posix Threading Library
- 即:POSIX 线程标准库,Linux 可以使用这个库进行多线程编程
对于 Linux 内核,信号 32 是最小的可靠信号
SIGRTMIN 在 signal.h 中定义,不同平台的 linux 可能不同 (arm linux)
不可靠信号 vs 可靠信号
不可靠信号
- 内核不保证信号可以递送到目标进程 (内核对信号状态进行标记)
- 如果信号处于未决状态,并且相同信号被发送,内核丢弃后续相同信号
可靠信号
- 内核维护信号队列,未决信号位于队列中,因此信号不会被丢弃
- 严格意义上,信号队列有上限,因此不可以无限制保存可靠信号
一些注意事项。。。
不可靠信号的默认处理行为可能不同 (忽略,结束)
可靠信号的默认处理行为都是结束进程
信号的可靠性由信号数值决定,与发送方式无关
信号队列的上限可通过命令设置
查询信号队列上限:ulimit -i
设置信号队列上限:ulimit -i 1000