我在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时如何成功,它仍然有效。它是否连接到共享内存段&#34;在父母和子进程之间? 你能解释一下吗?
答案 0 :(得分:2)
成功调用fork
后,将创建一个与调用进程完全相同的新进程。因此函数实际返回两次,一次返回父级,一次返回子级,父级的返回值是子级的PID,子级的返回值为0。
然而,新进程不会与父进程共享数据。所有构造(包括堆栈和全局变量)都与父级中的构造不同。
在这种情况下,子进程将{15}添加到value
。但是,此变量与父进程中的value
完全分开。因此,当父项打印value
时,它会打印父项具有的值,即5。