Linux 进程间通信概念
进程间通信(IPC)指的是两个或多个进程之间进行信息传递的过程。虽然进程具有独立性,内核数据结构、代码和数据彼此隔离,但通过特定的机制,它们可以共享资源或交换数据。
为什么需要 IPC
- 数据传输:一个进程需要将数据发送给另一个进程。
- 资源共享:多个进程共享同一份资源,如大文件。
- 通知事件:进程间发送信号,例如子进程终止时通知父进程。
- 进程控制:一个进程控制另一个进程的执行状态,常用于调试。
要让不同的进程看到同一份资源,操作系统必须提供系统调用作为桥梁。
管道通信
匿名管道特点
- 单向性:设计之初只允许单项数据通信。
- 血缘关系:通常用于具有父子关系的进程间通信。
- 生命周期:管道本质是文件,随进程退出而关闭。
- 同步机制:内部实现了进程间的同步。
- 字节流:面向字节流,读写次数不匹配可能导致阻塞。
进程池示例
在实现进程池时,需要注意资源回收。如果只退出了一个子进程而未回收所有僵尸进程,会导致资源泄漏。正确的做法是在主进程中遍历等待所有子进程结束,并关闭写端文件描述符。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: ./process_pool process_number\n");
return 1;
}
int n = atoi(argv[1]);
int pids[n];
for (int i = ; i < n; i++) {
pid = fork();
(pid == ) {
();
} (pid > ) {
pids[i] = pid;
}
}
( i = ; i < n; i++) {
();
}
;
}


