编程接口指南

进程间通信

本节介绍 SunOS 中作为与实时处理相关的接口的进程间通信 (interprocess communication, IPC) 接口。此外,还将介绍信号量、管道、FIFO、消息队列、共享内存、文件映射以及信号。有关有助于进程间通信的库、接口和例程的更多信息,请参见第 6 章,进程间通信

处理信号

发送者可以使用 sigqueue(3RT) 将信号连同少量信息一起发送到目标进程。

要对随后出现的暂挂信号进行排队,目标进程必须针对指定信号设置 SA_SIGINFO 位。请参见 sigaction(2) 手册页。

目标进程通常以异步方式接收信号。要同步接收信号,请阻塞信号并调用 sigwaitinfo(3RT)sigtimedwait(3RT)。请参见 sigprocmask(2) 手册页。此过程会导致同步接收信号。sigqueue(3RT) 的调用方发送的值将存储在 siginfo_t 参数的 si_value 部分中。如果不阻塞信号,则会导致将信号传送到 sigaction(2) 指定的信号处理程序,并且将值显示在此处理程序的 siginfo_t 参数的 si_value 中。

指定数量的信号和关联值可以通过进程发送并保持未传送状态。首次调用 sigqueue(3RT) 时,会为 {SIGQUEUE_MAX} 信号分配存储空间。此后,调用 sigqueue(3RT) 可在目标进程中成功加入队列或是在有限时间内失败。

管道、命名管道和消息队列

管道、命名管道和消息队列的行为方式与字符 I/O 设备类似。这些接口使用不同的连接方法。有关管道的更多信息,请参见进程之间的管道。有关命名管道的更多信息,请参见命名管道。有关消息队列的更多信息,请参见System V 消息POSIX 消息

使用信号量

信号量也同时以 System V 和 POSIX 风格提供。有关更多信息,请参见System V 信号量POSIX 信号量

请注意,使用信号量可能会导致优先级倒置,除非通过本章前面介绍的技术显式避免优先级倒置。

共享内存

对于进程,最快的通信方法就是直接通过共享内存段进行通信。如果两个以上进程尝试同时对共享内存进行读写,则内存内容可能会变得不准确。这种潜在的不准确性是使用共享内存时存在的主要问题。