码迷,mamicode.com
首页 > 系统相关 > 详细

【Linux】fork

时间:2014-09-23 18:56:35      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:for   数据   sp   c   代码   linux   r   管理   bs   

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

标签:for   数据   sp   c   代码   linux   r   管理   bs   

原文地址:http://www.cnblogs.com/shichuan/p/3988710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!