码迷,mamicode.com
首页 > 其他好文 > 详细

《UNIX环境高级编程》(fork和vfork)

时间:2016-05-12 12:26:59      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

《UNIX环境高级编程》(fork和vfork)

fork

  • 声明
    技术分享

  • 特性

    1. 调用fork可以创建一个新的进程;

    2. fork有两个返回值:
      返回0给子进程(原因是每个进程只有一个父亲,子进程可以通过getppid去得到父进程的ID,进程ID 0是预留给内核使用的,所以子进程的ID不可能是0);
      返回子进程的进程ID给父进程(一个进程可以有一个或多个子进程,但是没有API可以获取子进程的进程ID);

    3. 子进程是父进程的一份拷贝,子进程会复制父进程的数据空间、堆、栈。它们之间不会共享这部分的内容,它们只会共享正文段(正文段,你可以把它理解成代码段,相当于子进程拷贝了父进程的代码);
    4. 一般来说,fork之后,是父子进程先后执行的顺序是不确定的。这个取决于内核的调度算法;
  • 文件共享

    • 特性
      父进程所有打开的文件描述符都被复制到子进程中
    • fork之后常用的两种处理文件描述符的情况
      • 父进程等待子进程完成
      • 父子进程各自执行不同的程序段,通常用在网络服务进程中
  • fork失败的两个原因

    • 系统中有太多的进程
    • 该实际用户ID的进程总数超过了系统限制

vfork

  • 作用
    用于创建一个新的进程

  • 特性

    1. 调用序列和返回值与fork相同;
    2. vfork出来的子进程,不会将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec(或exit),所以就需要访问地址空间。但是在子进程调用exec(或exit)之前,它在父进程的空间中运行;
    3. vfork保证子进程先运行,当子进程执行完exec(或exit)后,父进程才会运行。但这有可能会造成死锁,比如,子进程里有依赖父进程的进一步的操作;

总结视图

技术分享

《UNIX环境高级编程》(fork和vfork)

标签:

原文地址:http://blog.csdn.net/timsley/article/details/51371542

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