进程之间的通信方式主要有管道、消息队列、共享内存、信号量、信号和套接字这几种适用场景各不相同。管道是最简单的 IPC 方式数据从一端写入从另一端读出单向流动。匿名管道只能用于有亲缘关系的进程比如父子进程。命名管道在文件系统里有个名字不相关的进程也能用。Shell 里的 cat file | grep xxx 就是用管道把两个进程串起来。消息队列允许进程发送和接收带类型的消息消息在队列里排队接收方可以按类型选择性地读取。比管道灵活但每条消息有大小限制Linux 默认是 8KB。共享内存是最快的 IPC 方式多个进程直接读写同一块物理内存不需要数据拷贝。但因为没有内置同步机制必须配合信号量或互斥锁使用否则会出现竞态条件。数据库的缓冲池、高性能缓存系统经常用共享内存。信号量本身不传递数据是用来同步的。可以控制多个进程对共享资源的访问顺序实现互斥或者限流。信号是一种异步通知机制用来告诉进程发生了某个事件。比如 CtrlC 会给前台进程发 SIGINTkill -9 会发 SIGKILL。信号只能传递一个信号编号不能带复杂数据。套接字最灵活既能在本机进程间通信也能跨网络通信。Unix 域套接字用于本机效率比 TCP 高。网络套接字用 TCP/UDP 协议是分布式系统通信的基础。