在学linux进程管理中有个fork系统调用,它是什么作用呢?我们来分析下

这是我们fork.c文件里面代码

我们执行完fork.c文件后发现多一个2
这是什么原因呢?我们进一步添加我们的代码进行分析

这是我们获取进程的代码,PID为当前进程ID,PPID为父进程ID
继续执行程序,我们发现

生成两个进程,其中一个进程是原先的进程,而且父进程不一样
分析内核:fork系统之前只有一个进程,fork之后又两个进程,其实在fork之前有一个PCB(内核stat_struct)指向代码段,数据段,堆栈段,fork之后生成新的PCB,复制一份代码段,数据段,堆栈段,PCB函数指针指向代码段,数据段,堆栈段。此时有两个PCB,则有两个进程。复制前PCB函数指针指向fork系统调用,复制完也是指向系统调用。故代码都是从fork系统调用开始跑,所以fork之后的代码实现两次(两个进程各自实现一次)。
本文通过一个简单的C程序示例,详细解析了Linux中fork系统调用的工作原理。文章解释了如何通过fork创建子进程,以及父进程与子进程间的区别与联系。通过对fork前后进程状态的对比,阐述了fork调用复制当前进程并创建新进程的过程。
584

被折叠的 条评论
为什么被折叠?



