我试图查找它,但我在调用 fork() 后立即难以理解父进程和子进程之间的关系。
它们是完全独立的进程,只通过 id/parent id 关联吗?还是他们共享内存?例如,每个进程的“代码”部分 - 是复制以便每个进程都有自己的相同副本,还是以某种方式“共享”以便只有一个存在?
我希望这是有道理的。
以全面披露的名义,这是“与作业相关的”;虽然这不是书中的直接问题,但我觉得它主要是学术性的,在实践中,我可能不需要知道。
最佳答案
在进程看来,整个内存都是重复的。
实际上,它使用“写时复制”系统。任何一个进程在 fork() 之后第一次更改其内存时,都会对修改后的页面(通常为 4kB)制作一个单独的副本。
通常进程的代码段不会被修改,在这种情况下它仍然是共享的。
关于c - 当我在 Unix 中调用 fork() 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455161/