子进程是否继承父进程的数据结构?

时间:2014-03-01 21:19:49

标签: linux child-process

在Linux中,如果父进程有任何数据结构(例如树,列表),那么这些数据结构是否由子进程继承?我的意思是,孩子是否可以访问相同的数据结构(任何指向该数据结构的指针)?

2 个答案:

答案 0 :(得分:5)

如果您在fork()之后谈论Linux / Unix进程,是的。他们获得了自己父进程数据的副本,因此在fork之后没有其他人看到它们(通常是通过copy-on-write实现的,所以内存页面不会被复制,直到写入,但这是用户程序没有看到的细节。)

如果您正在谈论Windows使用CreateProcess()启动新进程,否则新进程不会从父进程继承任何数据结构。


与使用任何特定的编程语言相比,这两者与您使用的操作系统有更多关系。

答案 1 :(得分:3)

假设您使用fork()之类的东西来创建子进程,它们将继承实际父进程上下文的全局内容:

  • 环境变量设置
  • 打开文件描述符
  • 等。

全局范围变量将从其实际状态复制到子进程上下文。对这些变量的更改不会反映在父进程中。

如果您想在父进程和子进程之间进行通信,请考虑使用pipesshared memory