c - fork() 期间重复的段?

标签 c unix memory stack fork

我研究过,在 fork 期间,父进程的数据和代码段被复制到子进程中。

请看下面的程序。

int main()
{
   int a = 5;
   pid_t pid;

   pid = fork();

   if(pid == 0)
   {
      printf("In child a = %d",a);
   }

   else
   {
     printf("In parent a = %d",a);
   }

   return 0;
}

这里 a 位于父进程的堆栈段中,因为它在函数 main() 中声明。子进程应该只获取父进程的代码和数据段的副本,而不是 fork() 期间的堆栈。但是当我运行程序时,我可以看到子进程也能够访问变量“a”。这意味着父进程的堆栈也以某种方式复制到子进程中。

请告诉我这样做的原因,如果我的理解有误,请纠正我。

最佳答案

你应该检查 docs再次。 fork 创建“调用进程的精确副本”。诚然,有很多异常(exception),但堆栈不是其中之一。

另外,如果堆栈没有被复制,检查 fork 的返回值(几乎总是一个堆栈变量)的非常常见的习惯用法(也用在您的代码中)将失败。除非堆栈(包括堆栈指针)被复制,否则 pid 不会堆栈位置。

关于c - fork() 期间重复的段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4290559/

相关文章:

linux - 关于 grep 命令

linux - 通过比较 shell 脚本中的两个字符串来请求变量

成员函数的Java内存分配

linux - 将特定的虚拟地址映射到特定的物理地址

C : write a function doesn't know how many parameter

c++ - 如何在netbeans中创建项目依赖(c/c++插件)

c - 为什么它在 spoj 上显示 sigsegv 错误..?

c - 如何从流中获取视频和音频并输出到视频文件和图像

linux - 如何避免 shell 中的魔数(Magic Number)?

c++ - 内存泄漏能走多远?