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, 跨平台,针对系统和是否跨电脑,选用不同的Socket 类型。
常用的有如下两种
UNIX Domain Socket
VSTCP/IP Socket
UNIX Domain Socket
具体集成文章:https://blog.csdn.net/goldWave01/article/details/135770238
UNIX Domain Socket
跨平台(Windows和MacOS通用代码集成文章)https://blog.csdn.net/goldWave01/article/details/135775365
TCP/IP Socket
具体集成文章:https://blog.csdn.net/goldWave01/article/details/135765223 - NSDistributedNotificationCenter, Mac 独有,适合数据不大且不频繁的通讯。 集成简单。
- Pasteboard 剪切板
- XPC,需要起XPC服务,并由根进程Launch在合适的时候进行拉起。比较安全,模块隔离。
XPC 是一种 OS X 进程间通信技术,通过权限分离机制来对应用沙箱机制做了一个补充。其中,权限分离是根据每个部分所需的系统资源访问将应用程序分成多个部分,每个部分可以使用提前声明的权限(沙箱)。这种单个组件称为XPC 服务。
XPC 服务的特点:权限分离 + 错误隔离
具体集成文章:https://blog.csdn.net/goldWave01/article/details/135289034