执行过程

linux fork函数执行过程。

假如想象 提交于 2020-03-02 06:40:51
这两天在看linux的fork函数,把这两天看到的消化一下,说说我的理解。 主要得益与两篇大牛的文章: 推荐先看这篇: 从一道面试题谈linux下的fork运行机制 再看这篇: Linux中fork()函数详解 第一篇虽然只有一个例子,但是感觉把fork的执行过程介绍很详尽,第二篇的例子很经典,但是对刚学的小白来说有点困难。 接下来谈谈看过之后我的总结与理解 首先必须明确一下几点: 1.进程在linux中成树状结构, init为根节点,其它进程均有父进程,某进程的父进程就是启动这个进程的进程,这个进程叫做父进程的子进程。 2.fork函数的作用就是创建一个子进程,子进程复制父进程的代码段,数据段,BSS段,堆,栈等所有用户空间的信息,在内核中操作系统为其重新申请了一个PCB,并且使用父进程的PCB来初始化,除了PID等特殊信息外,几乎所有的信息都是一样的 3.父子进程在创建了子进程后互相不关联,以独立身份抢占CPU资源,具体谁先执行有调度算法决定,用户空间没有办法干预, 4.子进程开始执行代码的位置是fork函数执行后的代码处,之前的都是继承父进程的 下面结合两个例子阐述一下fork的执行 例1: #include <stdio.h> #include <unistd.h> int main(){ int count = 0; pid_t = fork(); if(pid < 0)