首页 > 代码库 > 【Linux】fork

【Linux】fork

fork函数调用特点

  一次调用,两个返回

    为什么?

      每个进程在各自的地址空间中返回---->站在Linux内核角度思考fork调用

fork是一个系统调用,在Linux内核中完成

 

fork返回值为什么设计成pid>0是父进程, =0是子进程?

  一个父进程可以有N个子进程,父亲找儿子的pid比较难

 

fork理解角度:一次调用 两个分支同时运行 (并发)

 

fork子进程为什么从fork之后运行,不是从main函数从头开始?

  这和fork创建子进程的机制有关,子进程创建的机制为写时复制

  子进程要拷贝父进程的代码段、堆栈段、数据段、PCB进程控制块

  PCB控制块是Linux内核管理进程的数据结构(task_struct)

  

  因为子进程拷贝了父进程的运行场景,所以子进程没有必要再从main函数开始再运行一遍了

 

写时复制理解:

  子进程修改变量的时候才拷贝

  只拷贝页  ----->Linux内核的内存管理

 

 

系统错误码在全局变量errno里面

在程序中,perror可以把errno对应string打印

【Linux】fork