进程间通信

什么是进程间通信?
进程间通信(Inter-Process Communication, IPC)是指在不同进程之间传递数据和信息的机制。由于每个进程都有独立的地址空间,它们不能直接访问对方的内存,因此需要特殊的机制来进行通信。
主要的IPC机制
1. 管道(Pipes)
匿名管道:只能在有亲缘关系的进程间使用
命名管道(FIFO):可以在无亲缘关系的进程间使用
2. 信号(Signals)
异步通知机制
用于通知进程发生了某个事件
3. 消息队列(Message Queues)
允许进程以消息形式进行通信
消息可以有优先级
4. 共享内存(Shared Memory)
最快的IPC机制
多个进程共享同一块内存区域
5. 信号量(Semaphores)
用于进程同步
控制对共享资源的访问
6. 套接字(Sockets)
可用于网络通信
支持不同主机间的进程通信
管道示例
# 创建管道
$ command1 | command2
# 创建命名管道
$ mkfifo mypipe
$ cat mypipe & # 后台读取
$ echo "hello" > mypipe # 写入
信号示例
# 发送信号
$ kill -SIGTERM <pid>
$ kill -9 <pid> # SIGKILL
# 捕获信号
$ trap "echo 'Received SIGINT'" SIGINT
共享内存示例
// C语言示例
#include <sys/shm.h>
#include <sys/ipc.h>
key_t key = ftok("/tmp", 'A');
int shmid = shmget(key, 1024, IPC_CREAT | 0666);
char *data = shmat(shmid, NULL, 0);
选择合适的IPC机制
机制
速度
复杂性
适用场景
管道
中等
简单
单向数据流
信号
快速
简单
事件通知
消息队列
中等
中等
结构化数据
共享内存
最快
复杂
大量数据
套接字
慢
复杂
网络通信
参考资料
最后更新于