概述

最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思考加深了理解。现总结如下:

1.函数本身

(1)头文件

#include

#include

(2)函数原型

pid_t fork( void);

(pid_t 是一个宏定义,其实质是int 被定义在#include中)

返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

(3)函数说明

一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间,子进程有了独立的地址空间。

2.代码执行解释

(1)代码如下图所示

(2)分析

由操作系统相关知识可知,进程是系统资源分配的基本单位,因此子进程与父进程不共享进程资源空间。在执行代码段第8行之前,系统中只有默认的主进程。在执行完代码段第8行后,系统中就有了两个进程,即主进程和由其创建的子进程。

创建子进程,fork()函数返回两个数值,若创建成功,子进程中返回0;父进程返回子进程ID。用资源空间图示如下:

执行了fork()函数后,主进程为父进程生成了一份资源空间的副本。主进程中的pid为子进程的pid(pid>0),子进程中的pid为0。

在fork()函数之后父进程与子进程都从下一行执行,即第9行。因为主进程中pid>0,可以执行else if(pid>0)段代码,子进程pid=0,可以执行else if(pid==0)段代码。

(3)代码执行结果如下:

可见,"Before the fork ..."只执行了一次。"After the fork ..."执行了两次。

(具体的执行结果,可能会由于进程调度的不同,后面的四个输出顺序可能不同。不过第一个输出的一定是"Before the fork ...")。

fork是linux函数吗,linux fork()函数相关推荐

  1. 【Linux系统编程】fork()函数详解

    00. 目录 文章目录 00. 目录 01. 进程创建函数 02. 父子进程结构 03. 父子进程地址空间 04. 附录 01. 进程创建函数 #include <sys/types.h> ...

  2. linux系统如何使用fork函数创建子进程

    大家都知道linux是多进程的系统.可是,在linux中,进程是如何创建并运行的呢? 在linux系统中创建进程有两种方式:一是由操作系统创建,二是由父进程创建进程(通常为子进程).系统调用函数for ...

  3. Linux系统编程:fork函数的使用【循环创建N个子线程】

    fork函数介绍 在linux下面进行系统编程,一定要养成一个好习惯,不懂的函数 直接 找男人,用man 指令进行查看,虽然是全英文 但是要强迫自己 学会看英文文档!下面是介绍,我们看重点. FORK ...

  4. linux中fork函数详解,fork() 函数详解

    fork() 函数是 linux/unix 下一种特别的创建子进程的函数,它不同与 Windows,这个函数在执行成功后会有两个返回值,一个返回值==0代表创建了子进程,一个返回值大于0代表还是当前程 ...

  5. linux 打印函数宏,linux内核中的嵌入式汇编宏函数

    在看linux内核代码时,常会遇到诸如:static inline _syscall0(int,fork)这样的函数.经查阅资料,发现该函数是嵌入式汇编宏函数. linux内核提供了7个非常有用的宏定 ...

  6. linux启动程序api编程,Linux编程中关于API函数与系统调用间关系

    用户态xyz()函数,内核最终一般会调用形如sys_xyz()的服务例程来处理(不过也有一些例外,这里暂时不考虑) 函数xyz()是直接提供给用户编程使用的.图中"SYSCALL" ...

  7. Linux 编程中的API函数和系统调用的关系【转】

    转自:http://blog.chinaunix.net/uid-25968088-id-3426027.html 原文地址:Linux 编程中的API函数和系统调用的关系 作者:up哥小号 API: ...

  8. 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...

  9. linux exec 二程序,二十五、Linux 进程与信号---exec函数

    25.1 介绍 在用 fork 函数创建子进程后,子进程往往要调用一种 exec 函数以执行另一个程序 当进程调用一种 exec 函数时,该进程完全由新程序代换,替换原有进程的正文,而新程序则从其 m ...

最新文章

  1. 《LeetCode力扣练习》第155题 最小栈 Java
  2. vue.config.js多页配置
  3. chrome浏览器遭eFast浏览器恶意软件删除取代
  4. 常用端口号及对应服务
  5. 人工智能目标检测模型总结(一)——R-CNN、Fast R-CNN、Faster R-CNN
  6. python 生成可执行文件.exe
  7. 微信语音怎么转发给好友
  8. C: warning: too many arguments for format [-Wformat-extra-args]
  9. zencart和php是什么,什么是ZenCart ZenCart有什么特点 ZenCart模板
  10. linux 清除swap 数据,linux清除swap
  11. drcom 不耍流氓
  12. 用matlabd批量处理图片
  13. 180/360度舵机控制方法
  14. java 民族_java简历 五年
  15. 第3章 栈和队列 练习题
  16. C语言 字符串-字符串的复制
  17. ubuntu免费画图工具
  18. 使用云主机进行深度学习
  19. 第一个实训项目(2)
  20. Java入门之窗口关闭,巨巨巨详细!!!

热门文章

  1. 小于60的数中能被1到10整除的数量
  2. 收藏 | 卷积神经网络 C++ 从零开始实现
  3. 详解通用物体检测算法:基于锚框与无需锚框
  4. 如何从0-1构建自己的”pytorch“(自己专属的深度学习框架)——part01
  5. 摆动排序leetcode324
  6. 坑爹的BufferManager
  7. 安徽池州贵池中学老师经典语录,我喷了
  8. 深入理解Kafka Connect:转换器和序列化
  9. iOS面试准备之思维导图
  10. 第四章:Spring项目文件上传两种方式(全解析)