C中叉后的Pid

时间:2018-02-20 13:46:29

标签: c linux fork

我在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;在父母和子进程之间? 你能解释一下吗?

1 个答案:

答案 0 :(得分:2)

成功调用fork后,将创建一个与调用进程完全相同的新进程。因此函数实际返回两次,一次返回父级,一次返回子级,父级的返回值是子级的PID,子级的返回值为0。

然而,新进程不会与父进程共享数据。所有构造(包括堆栈和全局变量)都与父级中的构造不同。

在这种情况下,子进程将{15}添加到value。但是,此变量与父进程中的value完全分开。因此,当父项打印value时,它会打印父项具有的值,即5。