当前位置:嗨网首页>书籍在线阅读

15-利用信号进行进程间通信

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

22.12 利用信号进行进程间通信

从某种角度,可将信号视为进程间通信(IPC)的方式之一。然而,信号作为一种IPC机制却也饱受限制。首先,与后续各章描述的其他IPC方法相比,对信号编程既繁且难,具体原因如下。

  • 信号的异步本质就意味着需要面对各种问题,包括可重入性需求、竞态条件及在信号处理器中正确处理全局变量。(如果用sigwaitinfo()或者signalfd()来同步获取信号,这些问题中的大部分都不会遇到。)
  • 没有对标准信号进行排队处理。即使是对于实时信号,也存在对信号排队数量的限制。这意味着,为了避免丢失信息,接收信号的进程必须想方设法通知发送者,自己为接受另一个信号做好了准备。要做到这一点,最显而易见的方法是由接收者向发送者发送信号。

还有一个更深层次的问题,信号所携带的信息量有限:信号编号以及实时信号情况下一字之长的附加数据(一个整数或者一枚指针值)。与诸如管道之类的其他IPC方法相比,过低的带宽使得信号传输极为缓慢。

由于上述种种限制,很少将信号用于IPC。