需求
多进程通信有哪几种方式?
解决
管道
- 命名管道 FIFO 使用
mkfifo
来创建管道文件。 不相关进程也可以通信。 - 匿名管道 使用
fork
来创建。只能用于父子进程。
消息队列
queue 保存在内核中的消息列表,如果没有释放,会一直存在。缺点时,不适合大数据的传输,单个消息有长度限制,全部消息总长度也有限制。
共享内存
同一块内存,多个进程都可以读写,可以省去复制的时间。但是如何管理多个进程的读写是个问题。
信号量
信号量可以用来管理共享内存,只有拿到信号量的才能进行读写。
信号
异常工作下的情况,就需要使用信号来进行干预了。比如说 ctrl-c
发出的
SIGINT
用来终止进程。
socket
可以用来本机之间不同进程的通信,也可以用作网络上不同主机之间的通信。