gpt4 book ai didi

linux - 创建子进程时是否需要将数据从父进程复制到子进程?

转载 作者:太空宇宙 更新时间:2023-11-04 09:39:17 27 4
gpt4 key购买 nike

我了解到,在 linux 中 fork() 用于创建一个新进程。它为子进程分配新内存,然后将数据从父进程复制到子进程,例如文件描述符。然后可以使用exec()加载自己的数据,覆盖进程空间。但是我想知道是否有必要将父进程的数据复制到子进程?将子进程的真实数据直接加载到它的进程空间怎么样?

最佳答案

阅读更多关于 fork (system call) 的信息, address space , virtual memory (内核正在使用 MMU ),copy-on-write , processes ...

另请阅读 Advanced Linux Programming .它有几个章节解释了这些困难的概念。

父进程和子进程有不同的地址空间,但在 fork 之后,父进程和子进程的地址空间几乎相等(多亏了虚拟内存和写时复制技术)。唯一的区别是 fork(2) 的结果系统调用(这是 [几乎] 创建进程的唯一方法)

execve(2)完全替换其调用进程的地址空间(和执行上下文)并用于启动新的可执行程序(通常是 ELF 二进制可执行文件)。

您不需要将数据从父进程复制到子进程。内核正在神奇地为您做这件事。

你可能想做一些inter-process communication父子之间的 (IPC),通常通过管道(读取 pipe(7) & pipe(2) & poll(2) ...), fork 之前设置.您可能想使用 shared memory -如果您是新手,请避免使用它,因为正确使用它很棘手-但您应该关心同步。参见 shm_overview(7) & sem_overview(7)了解更多。

也可以使用 strace(1)并研究一些自由软件外壳(如sashbash)的源代码

关于linux - 创建子进程时是否需要将数据从父进程复制到子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23170985/

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