macOS进程间通信的常用技术汇总
- 命令行传参。yyds
- 管道(pipe), 匿名管道, c++的技术,可以跨平台使用
只能在父子进程间通信,由于是单向的管道,只能单方面传输数据。 如果需要双向传输,需要建立双向的两条管道才行
匿名管道创建的文件描述符只能在fork
出来的进程间传递和读取. - 有名管道(FIFO)
如果是NSTask
或其他手段创建出的进程,需要使用有名管道。
具体集成文章:https://blog.csdn.net/goldWave01/article/details/135369065 - 共享内存shm(Shared Memory)
适合大容量频繁数据进行传输,比如音视频数据。如果临时传输tag标记,也可以在跨平台使用。
Qt:QSharedMemory
, Mac:<sys/mman.h>
- Socket, 跨平台,适用频繁且小量的数据。需要自己写数据解析
Mac:<sys/socket.h>
UNIX Domain Socket
VSTCP/IP Socket
- NSDistributedNotificationCenter, Mac 独有,适合数据不大且不频繁的通讯。 集成简单。
- Pasteboard 剪切板
- XPC,需要起XPC服务,并由根进程Launch在合适的时候进行拉起。比较安全,模块隔离。
XPC 是一种 OS X 进程间通信技术,通过权限分离机制来对应用沙箱机制做了一个补充。其中,权限分离是根据每个部分所需的系统资源访问将应用程序分成多个部分,每个部分可以使用提前声明的权限(沙箱)。这种单个组件称为XPC 服务。
XPC 服务的特点:权限分离 + 错误隔离
具体集成文章:https://blog.csdn.net/goldWave01/article/details/135289034