在Linux中,如果父进程具有任何数据结构(例如,树,列表),那么子进程继承的是那些数据结构?我的意思是,孩子是否可以访问相同的数据结构(指向该数据结构的任何类型的指针)?子进程是否继承父进程的数据结构?
回答
如果您在讨论fork()
之后的Linux/Unix进程,是的。他们得到他们自己的父进程的数据副本,所以无论他们中的哪一个在fork之后都看不到另一个(通常通过写时复制来实现),所以内存页不会被复制,直到写入,但这是用户程序没有看到的细节)。
如果您在谈论Windows启动一个新进程CreateProcess()
,否,新进程不会从父进程继承任何数据结构。
这两者都与您使用的操作系统有关,而不是使用任何特定的编程语言。
假设你正在使用类似fork()
创建子进程,他们会继承一切的全球对实际父进程的背景:
- 设置环境变量
- 打开文件描述符
- 等等
全局范围变量将复制给孩子pr从他们实际所在的状态中获取背景。将这些变量的变化不会在中体现出来。
如果要在父级和子级进程之间进行通信,请考虑使用pipes或shared memory。
yes fork();子进程将访问相同的数据结构,否则它将获得该数据结构的副本 – user2831683
@ user2831683没有副本!只需参考,在访问此类数据时应注意竞争条件。 –
因此,如果我在子进程中对数据结构进行一些更改,那么这些更改也将用于父进程 – user2831683
- 1. 子进程如何使用fork()从父进程继承数据?
- 2. 从父进程在Perl中的子进程继承的模块
- 3. 子进程继承什么?
- 4. 继承Windows中父进程的句柄
- 5. Linux中的新进程从父进程的优先级继承
- 6. 如何知道环境变量是否从父进程继承?
- 7. 变量/父子程序继承/子结构
- 8. 子进程是否总是在父进程内运行?是否...线程...?
- 9. 子进程是否可以修改父进程的内存?
- 10. 子进程/父进程
- 11. 获取继承父代IO的子进程的输出
- 12. 防止继承父级环境的子进程
- 13. 检测子进程是否挂起父进程
- 14. 是否将子进程pid()分配给父进程?
- 15. mod_perl并在子进程中继承STDIN
- 16. 嵌套数据结构,让孩子继承父
- 17. 只杀害父进程,而不是在bash中的子进程和父进程
- 18. 子进程stdin不会获取父进程发送的数据
- 19. 父进程和子进程的关系
- 20. 没有挂父进程的子进程
- 21. 如何使COM主机进程避免继承父进程的环境变量
- 22. 创建一个进程而不继承父进程的环境变量
- 23. 子应用程序是否会从其父级web.config继承?
- 24. 父和子进程
- 25. C:父子进程
- 26. Linux进程如何将数据从父进程传递给子进程
- 27. 退出后Java进程构建器子进程继续
- 28. 父进程和子进程之间共享哪些内存结构?
- 29. 如何看父进程和子进程
- 30. 从子进程获取父进程ID
(linux),子进程获取数据结构的副本还是获取数据结构的新数据结构(例如树)。 – user2831683
如果用“其新数据结构”表示一棵空树,而父树有一些条目 - 不。孩子的数据空间是分岔时父母的数据空间的精确副本。所以这是一个新的数据结构,因为它是一个副本,而不是原始数据结构,如果您修改子进程的副本,那么父进程不会注意到。但是,在fork之后,其中一个进程会更改内容,数据结构的内容将完全相同。 –
是否有任何方法可以使其中的更改反映在另一个 – user2831683