📅  最后修改于: 2023-12-03 15:37:35.151000             🧑  作者: Mango
fork()函数是用来创建一个新的进程的系统调用。在父进程中调用fork()函数后,操作系统会创建一个新的子进程,该子进程与父进程几乎完全相同,包括代码、数据、打开的文件等等。但子进程有自己的PID(进程ID)并且拥有自己的内存空间。
使用fork()函数可以在一个C程序中创建多个进程,从而实现并发执行。
下面是一个示例程序,使用fork()函数创建n个子进程:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main() {
int n = 5; // 创建5个子进程
pid_t pid;
for (int i = 0; i < n; i++) {
pid = fork(); // 调用fork()函数创建子进程
if (pid == -1) {
printf("Fork failed\n"); // 如果fork()函数返回-1,表示创建子进程失败
break;
}
else if (pid == 0) {
printf("Child process %d (PID %d) created\n", i+1, getpid()); // 子进程输出信息
break;
}
else {
printf("Parent process %d (PID %d) created child process %d (PID %d)\n", getpid(), pid, i+1, pid); // 父进程输出信息
}
}
return 0;
}
代码解释:
代码执行结果:
Parent process 3291 (PID 3290) created child process 1 (PID 3291)
Child process 1 (PID 3291) created
Parent process 3292 (PID 3290) created child process 2 (PID 3292)
Child process 2 (PID 3292) created
Parent process 3293 (PID 3290) created child process 3 (PID 3293)
Child process 3 (PID 3293) created
Parent process 3294 (PID 3290) created child process 4 (PID 3294)
Child process 4 (PID 3294) created
Parent process 3295 (PID 3290) created child process 5 (PID 3295)
Child process 5 (PID 3295) created
可以看到,父进程创建了5个子进程,而每个子进程都输出了自己的信息。
使用fork()函数时需要注意以下几点: