zoukankan      html  css  js  c++  java
  • Linux学习之“vfork函数”

    为什么使用vfork()?

    希望父子进程执行不同的代码。例如:

    网络服务程序中,父进程等待客户端的服务请求,当请求达到时,父进程调用fork,使子进程处理该次请求,而父进程继续等待下一个服务请求到达。
    vfork与fork的函数原型相同,用于创建新进程,而该新进程的目的是exec一个新程序(执行一个可执行的文件)。
    由于新程序将有自己的地址空间,因此vfork函数并不将父进程的地址空间完全复制到子进程中。
    注意以下两点:
    1.子进程在调用exec或exit之前在父进程的地址空间中运行
    2.vfork函数保证子进程先执行,在它调用exec或者exit之后,父进程才可能被调度执行
    View Code
    因为在_exit(0);之前子进程运行在父进程的地址空间中,所以对glob和var的++操作都最终在父进程中输出了。
    至于最后为什么使用_exit而不是exit,见"Linux学习之"exit函数""为什么使用vfork()?

    希望父子进程执行不同的代码。例如:

    网络服务程序中,父进程等待客户端的服务请求,当请求达到时,父进程调用fork,使子进程处理该次请求,而父进程继续等待下一个服务请求到达。
    vfork与fork的函数原型相同,用于创建新进程,而该新进程的目的是exec一个新程序(执行一个可执行的文件)。
    由于新程序将有自己的地址空间,因此vfork函数并不将父进程的地址空间完全复制到子进程中。
    注意以下两点:
    1.子进程在调用exec或exit之前在父进程的地址空间中运行
    2.vfork函数保证子进程先执行,在它调用exec或者exit之后,父进程才可能被调度执行
    View Code
    因为在_exit(0);之前子进程运行在父进程的地址空间中,所以对glob和var的++操作都最终在父进程中输出了。
    至于最后为什么使用_exit而不是exit,见"Linux学习之"exit函数""
  • 相关阅读:
    高价格快消品终端制胜的七大“法宝”
    欧美零售商的全渠道实践
    如何做好IT项目启动阶段的管理
    项目进度管理的三大软技巧
    如何建立生鲜商品的组织结构和采购渠道
    生鲜关注点和注意点
    超市基本业务介绍
    chrome开发配置(四)生成项目及配置库引用
    chrome开发配置(三)安装开发工具
    chrome开发配置(二)获取源代码
  • 原文地址:https://www.cnblogs.com/zhangyubao/p/7016913.html
Copyright © 2011-2022 走看看