fork() 函数是 Linux 系统调用中用于创建新进程的函数。它允许一个进程(称为父进程)创建另一个进程(称为子进程),子进程几乎是父进程的一个副本,拥有相同的代码、数据、堆栈和文件描述符等。
fork() 返回子进程的 PID。fork() 返回 0。fork() 失败,则返回 -1。以下是一个简单的 fork() 示例:
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == -1) {
// fork 失败
perror("fork failed");
return 1;
} else if (pid == 0) {
// 子进程
printf("I am the child process, my PID is %d and my PPID is %d
", getpid(), getppid());
} else {
// 父进程
printf("I am the parent process, my PID is %d and my child's PID is %d
", getpid(), pid);
}
return 0;
}
由于 fork() 创建的子进程是父进程的一个副本,它们共享相同的内存空间(直到其中一个进程调用 exec() 系列函数或退出)。这使得父子进程之间可以通过以下方式进行通信:
fork() 可能会失败,因此需要进行错误处理。fork() 是 Linux 系统中创建新进程的基本函数,通过它可以实现父子进程之间的通信和资源管理。在使用 fork() 时,需要注意资源管理和同步问题,以确保程序的正确性和稳定性。