跳转至

进程间通信

Inter-Process Communication 进程间通信,指至少两个进程或线程间传送数据或信号的一些技术或方法,简称IPC。

管道 Pipe

普通管道只用于父子进程间的通信,具名管道(Name Pipe)有了名字,可以允许非亲缘关系进程间通信

管道只能用于无格式字节流以,并且缓冲区大小受限

ps -ef | grep xxx

信号 Signal

可以通知目标进程(还可以通知自己)某种事件发生

kill -9 pid

信号量 Semaphore

用于两个进程之间同步协作手段,它相当于操作系统提供的一个特殊变量,程序可以在上面进行wait()notify()操作

共享内存

允许多个进程访问同一块公共的内存空间,这是效率最高的进程间通信形式。

消息队列 Message Queue

进程可以向队列添加消息,被赋予读权限的进程则可以从队列消费消息。

套接字接口 Socket

消息队列和共享内存只适合单机多进程间的通信,套接字接口可用于不同机器之间的进程通信。Socket起初是由UNIX系统的BSD分支开发出来的,现在已经移植到所有主流的操作系统上。

出于效率考虑,当仅限于本机进程间通信时,套接字接口是被优化过的,不会经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等操作,只是简单地将应用层数据从一个进程拷贝到另一个进程,这种进程间通信方式有个专名的名称:UNIX Domain Socket,又叫做 IPC Socket。


最后更新: 2022-06-14