fork创建进程的步骤

fork创建进程的步骤

我们都知道,在Linux中调用fork()函数,会创建一个子进程,那么在创建这个子进程的过程中,发生了些什么事情?

首先,我们要知道,fork()函数其实是调用发起_fork()系统调用,控制权由用户态转为内核态,

内核会分配新的内存块和内核数据结构给子进程(也就是PCB task_struct结构体),

然后内核会将父进程的部分数据内容以二进制形式拷贝到子进程,

下来再将所谓的子进程PCB加入到管理链表中(操作系统管理进程就是将程序用PCB描述,用链式结构进行管理),

然后从内核态返回用户态(父进程fork返回进程pid,子进程返回0),

后开始调度器调度。

但是我们要注意一点,fork之前父进程独立执行,fork之后父子进程分别执行自己的执行流,但是谁先执行由调度器调度。

这里还有一点需要注意,当子进程刚被创建出来,父子进程不再写入的时候,父子进程是数据共享一份,代码独有,但是当有任意一方试图写入数据的时候,便已写时拷贝的方式各自拥有一份数据

这就是所谓的写时拷贝。

当然当然,fork()也有可能调用失败,fork()调用失败的理由也就这两种?

系统中有太多的进程,资源不够

实际用户的进程超过了限制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章