fork()创建的是进程不是线程,他们的整个虚拟存储空间都是相互独立的,当然都是有副本的。函数内部定义的局部变量放在栈中,而全局变量则是放在data或者bss段中,他们都有副本。包括你的代码段text也是有副本的。
当然linux内核为了节省内存/提高执行速度可以采用copy on write技术,也就是只有当某个进程要写入一个页面的时候才进行拷贝副本 *** 作。不过这对应用程序都是透明的,不可见的。
fork系统调用是“复制”进程,所以复制出来的子进程是从代码的最开始从头执行的。如果是要用fork,就需要规划好代码,因为代码里面可能需要加上对父进程、子进程的区分判断,父进程、子进程根据需要可能要执行不同的代码。
主进程一个A
第一个fork创建的进程输出一个A
第一个fork创建的进程执行共享代码第二个fork生成一个进程输出一个A
主进程执行第二个fork创建一个进程输出一个A
总共四个。子进程是从fork调用点开始执行,所以不会循环fork无限创建
改后为什么还是这样不太清楚
以上就是关于Linux下fork()后生成的两个进程对于全局变量也是两个副本吗全部的内容,包括:Linux下fork()后生成的两个进程对于全局变量也是两个副本吗、linux中fork创建进程 新进程是从头开始执行吗、fork的迷惑等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)