在 Debian(其实是 Linux 通用)下,进程间通信(IPC,Inter-Process Communication)有多种实现方式,下面按常见程度 + 使用场景给你系统梳理一下。
特点:单向、父子进程间
适用:shell 命令组合、父子进程
int fd[2];
pipe(fd);
if (fork() == 0) {
// 子进程
close(fd[1]);
read(fd[0], buf, sizeof(buf));
} else {
// 父进程
close(fd[0]);
write(fd[1], "hello", 5);
}
Shell 中:
ls | grep ".c"
特点:可用于无亲缘关系进程
路径:文件系统中的一个“特殊文件”
mkfifo /tmp/myfifo
写进程:
echo hello > /tmp/myfifo
读进程:
cat /tmp/myfifo
特点:异步通知,数据量极小
适用:通知、控制(如 kill)
signal(SIGUSR1, handler);
kill(pid, SIGUSR1);
常用信号:
SIGTERM 终止SIGKILL 强杀SIGUSR1 / SIGUSR2 自定义特点:最快,无拷贝
适用:大数据、高频通信
shmget();
shmat();
Debian 下可用:
shm_open)⚠️ 通常需要配合 信号量 做同步
特点:有结构、可按类型读
适用:异步、解耦
msgget / msgsnd / msgrcvmq_open / mq_send特点:不是传数据,是同步/互斥
适用:共享资源保护
semget();
semop();
最灵活、最通用
socket(AF_UNIX, SOCK_STREAM, 0);
路径示例:
/var/run/docker.sock
特点:
常用于:
dbus-send ...
最简单但不可靠:
适合:
| 场景 | 推荐 |
|---|---|
| 父子进程 | pipe |
| 无关系进程 | FIFO / socket |
| 高性能 | 共享内存 |
| 异步通知 | signal / message queue |
| 系统服务 | D-Bus |
| 跨主机 | socket (TCP) |
你可以告诉我:
我可以直接给你可运行示例。