gpt4 book ai didi

c - C 中 fork 后的 Pid

转载 作者:行者123 更新时间:2023-11-30 20:53:23 24 4
gpt4 key购买 nike

我用 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后,将创建一个与调用进程完全相同的新进程。所以该函数实际上返回了两次,一次返回父进程,一次返回子进程,父进程的返回值为子进程的PID,子进程的返回值为0。

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

在本例中,子进程将 15 添加到 value。然而,该变量与父进程中的value完全分开。因此,当父级打印 value 时,它会打印父级拥有的值,即 5。

关于c - C 中 fork 后的 Pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48886751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com