c - 当我在 Unix 中调用 fork() 时会发生什么?

标签 c unix fork process

我试图查找它,但我在调用 fork() 后立即难以理解父进程和子进程之间的关系。

它们是完全独立的进程,只通过 id/parent id 关联吗?还是他们共享内存?例如,每个进程的“代码”部分 - 是复制以便每个进程都有自己的相同副本,还是以某种方式“共享”以便只有一个存在?

我希望这是有道理的。

以全面披露的名义,这是“与作业相关的”;虽然这不是书中的直接问题,但我觉得它主要是学术性的,在实践中,我可能不需要知道。

最佳答案

在进程看来,整个内存都是重复的。

实际上,它使用“写时复制”系统。任何一个进程在 fork() 之后第一次更改其内存时,都会对修改后的页面(通常为 4kB)制作一个单独的副本。

通常进程的代码段不会被修改,在这种情况下它仍然是共享的。

关于c - 当我在 Unix 中调用 fork() 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455161/

相关文章:

sockets - 带有 Unix 模块的 ocaml 简单的 http 服务器

c - 为什么我的信号处理程序不仅等待子进程?

c - flexpath 添加不起作用

C壳: Program hanging in first child

unix - 是否可以在 Bash 中禁用命令替换?

c - 使用 fork 和 execvp 启动/停止/etc/init.d/中的服务不起作用

创建一个没有 fork() 的子进程

c++ - 使用 fork 在两个进程之间逐个字符地发送字符串

C程序中各种格式说明符的说明

c++ - 了解 '&' 运算符