在 Unix-like 系统中,fork() 函数是用于创建新进程的系统调用。当调用 fork() 时,会创建一个新的子进程,该子进程是原始进程的副本。fork() 函数在父进程和子进程中返回不同的值,具体如下:
对于父进程:fork() 返回新创建子进程的进程 ID(PID)。这个 PID 是一个正整数。
对于子进程:fork() 返回值为 0。这是子进程的标识。
所以,在调用 fork() 后,父进程和子进程同时从 fork() 返回,但返回的值不同。父进程会接收到新创建子进程的 PID,而子进程则会返回 0。
这种返回值的机制可以用来区分父进程和子进程的执行路径。通常,父进程会使用新创建的子进程的 PID 来跟踪子进程的状态,并做出相应的处理。而子进程可以根据返回值来确定自己是子进程,然后执行相应的任务。
下面是一个简单的示例代码,用于展示 fork() 的使用:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid;
pid = fork();
if (pid < 0) {
// fork() 失败的处理逻辑
perror("fork error");
} else if (pid == 0) {
// 子进程逻辑
printf("This is the child process (PID: %d)\n", getpid());
} else {
// 父进程逻辑
printf("This is the parent process (PID: %d)\n", getpid());
printf("Child process PID: %d\n", pid);
}
int nStat = 0;
printf("wait PID: %d\n", pid);
int nWaitId = waitpid(pid, &nStat, 0);
printf("wait PID: %d nstat: %d\n", pid, nStat);
return 0;
}
运行结果