微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在创buildsubprocess时,是否需要将父进程的数据复制到subprocess?

我了解到,在linux fork()中用来创build一个新的进程。 它为subprocess分配新的内存,然后将数据从父进程复制到subprocess,如文件描述符。 然后exec()可以用来加载自己的数据并覆盖进程空间。 但是我想知道是否需要将父进程的数据复制到subprocess? 将subprocess的实际数据直接加载到进程空间如何?

subprocess在父进程之后启动

在Ruby中用双叉创build一个守护进程

fork()的目的是什么?

在困境内分叉

printf换行符有行缓冲区?

详细了解fork(系统调用) , 地址空间 , 虚拟内存 (内核正在使用MMU ), 写时复制 , 进程 …

另请阅读高级Linux编程 。 它有几个章节解释这些困难的概念。

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

execve(2)完全替代了调用进程的地址空间(和执行上下文),用来启动一个新的可执行程序(通常是一个ELF二进制可执行文件)。

你不需要从父母到孩子的过程中复制数据。 内核对你来说是神奇的。

您可能希望在父子之间进行一些进程间通信 (IPC),通常通过管道(读取管道(7)和管道(2)和轮询(2) …)在fork 之前进行设置。 你可能想要使用共享内存 – 如果你是一个新手,就避免使用共享内存 ,因为使用正确的代码很棘手 – 但是你应该关心同步。 有关更多信息,请参阅shm_overview(7)和sem_overview(7) 。

也可以使用strace(1)和学习一些免费软件shell(如sash或bash )的源代码

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐