开发者社区> 问答> 正文

Linux下C 的fork()函数问题 谢谢!

比如说有这么一段代码(无实义)

int main()

{ b(); a(); c(); d(); ....... ..............................}

void a(){ int a, int b; ....................... fork(); ...............}

void b(){ int a ,in b ........ ............. ....}
void c(){ int a ,in b ........ ............. ....}

void d(){ int a ,in b ........ ............. ....}

请问

就是当程序运行到 fork()函数时 ,fork函数复制的代码以及其它的数据时;

是复制程序的所有代码( main(),b() ,c(), d())以及数据?

还是复制的是 a()这个函数的全部代码及数据?

或者是复制的是从 main函数到a()函数这之间被调用过的函数的数据以及代码?

展开
收起
a123456678 2016-06-14 16:45:36 2185 0
1 条回答
写回答
取消 提交回答
  • 如果想了解linux内核中是如何实现fork的,可参考linux kernel development, 3rd edition,该书里面有比较详细的解释。

    在fork一个process的时候,并不是立即复制所有pages,而是采用copy on write机制,当该Page有write操作的时候,才真正的复制了这个page,这种COW机制能够非常快速的创建进程,并执行。

    2019-07-17 19:38:09
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载