【发布时间】:2018-07-30 21:40:38
【问题描述】:
我用 C 编写了这个简单的代码来模拟 Linux 中的 fork 之后发生的情况
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int value = 5;
int main()
{
pid t pid;
pid = fork();
if (pid == 0) { /* child process */
value += 15;
return 0;
}
else if (pid > 0) { /* parent process */
wait(NULL);
printf("PARENT: value = %d",value); /* LINE A */
return 0;
}
}
即使我不明白 fork() 如何成功地为父进程和子进程提供不同的 PID,它也可以工作。它是否连接到父进程和子进程之间的“共享内存段”? 能解释一下吗?
【问题讨论】:
-
看来你走得太快了。你是在暗示它不应该工作,因为你不理解它。放慢脚步,了解更多基本概念,然后尝试学习
fork()和/或线程。 -
fork()调用操作系统内核的功能。内核复制该进程,为新进程分配一个未使用的 ID,并使fork()在两个进程中返回不同的值。除了由内核管理的父子关系之外,这两个进程是独立的并且彼此独立运行。没有“共享内存段”。