• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 简单掌握Linux系统中fork()函数创建子进程的用法

简单掌握Linux系统中fork()函数创建子进程的用法

作者:Worker 字体:[增加 减小] 来源:互联网 时间:2017-05-28

Worker 通过本文主要向大家介绍了fork创建子进程,fork进程,fork子进程,fork创建进程,linux fork等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

fork()函数用于从已存在的进程中创建一个新进程。新进程称为子进程,而园进程称为父进程。使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程的上下文、代码段、进程堆栈、内存信息、打开的文件描述符、符号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等。

因为子进程几乎是父进程的完全复制,所以父子两进程会运行同一个程序。这就需要用一种方式来区分它们,并使它们照此运行,否则,这两个进程不可能做不同的事。实际上是在父进程中执行fork()函数时,父进程会复制一个子进程,而且父子进程的代码从fork()函数的返回开始分别在两个地址空间中同时运行,从而使两个进程分别获得所属fork()函数的返回值,其中在父进程中的返回值是子进程的进程号,而在子进程中返回0。因此,可以通过返回值来判断该进程的父进程还是子进程。

同时可以看出,使用fork()函数的代价是很大的,它复制了父进程中的代码段、数据段和堆栈段里的大部分内容,使得fork()函数的系统开销比较大,而且执行速度也不是很快。

代码示例:

#include <stdio.h>
#include <unistd.h>

int main(int argc, const char * argv[]) {
  // insert code here...
  pid_t pid;
  if((pid = fork()) == 0){
    //返回0的是子进程
    printf("child pid: %d\n", getpid());
  } else {
    printf("pid: %d\n", pid);//父进程中返回子进程的pid
    printf("father pid: %d\n", getpid());
  }
}

</div>

打印的结果如下:

pid: 552
father pid: 549
child pid: 552
</div>

以下是一些注意点及总结:
1) 之前在VS上想要用,结果发现根本没有这个头文件;因为<unistd.h>是类unix系统才有的;上面的代码在mac os上测试OK。

2) fork()是用来创建子进程的,创建之后子进程是父进程的副本,子进程获得父进程的数据空间、堆和栈的副本,注意两者并不是共享的。父子两者仅共享代码段。这个是以前的实现,现在的话一般不会直接去复制,而是写时复制(copy-on-write)。

3) fork()之后父子进程的执行顺序是不确定的。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 使用C语言的fork()函数在Linux中创建进程的实例讲解
  • 举例讲解C语言的fork()函数创建子进程的用法
  • C语言的fork函数在Linux中的进程操作及相关面试题讲解
  • 简单掌握Linux系统中fork()函数创建子进程的用法

相关文章

  • 2017-05-28在C语言编程中使用变量的基础教程
  • 2017-05-28深入解析C++中类的多重继承
  • 2017-05-28深入C语言把文件读入字符串以及将字符串写入文件的解决方法
  • 2017-05-28浅谈内联函数与宏定义的区别详解
  • 2017-05-28C++中的const和constexpr详解
  • 2017-05-28c++ builder TreeView控件节点遍历代码
  • 2017-05-28C语言putenv()函数和getenv()函数的使用详解
  • 2017-05-28C++ 实例之九宫格广度优先遍历
  • 2017-05-28vc6.0中c语言控制台程序中的定时技术(定时器)
  • 2017-05-28c语言实现奇偶排序算法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • VC++实现程序开机启动运行的方法
    • C++位操作的常见用法小结
    • C++中与输入相关的istream类成员函数简介
    • C语言static修饰函数详细解析
    • C++ 类的静态成员深入解析
    • 用c语言实现冒泡排序,选择排序,快速排序
    • 举例剖析C++中引用的本质及引用作函数参数的使用
    • C++破坏MBR的代码
    • MFC扩展DLL中导出类和对话框的实现方法
    • 基于C语言实现的aes256加密算法示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有