fork()函数结果分析

计算机系统基础-fork()
fork函数
运行结果
结果分析

以进程图为主,对结果进行分析。

fork0

调用fork(),创建子进程,fork() == 0时,即fork()返回值为0,子进程输出Hello from child;
fork()返回值不为0,父进程输出Hello from parent。
父子进程并发执行,输出的顺序不固定,输出序列对应进程图的拓扑顺序。

fork1

x=1,调用fork(),创建子进程,
fork() == 0时,即fork()返回值为0,子进程获得父进程代码、数据段、堆、栈等资源的副本。x++,故x = 2,输出pid和x;
fork()返回值不为0,父进程中,子进程对x的运算是独立的,x–,故x=0。

fork2

fork3

fork4

fork5
进程图与fork4类似

fork6

atexit()在函数终止时被调用,故在fork()后执行,父进程和子进程都会输出Cleaning up语句

fork7

子进程输出语句结束,父进程输出语句后一直进行while循环。Shell命令不会执行,需要手动挂起或中断父进程。

$ ./fork 7

用ps命令查看系统中执行的程序

可以看到子进程的状态码为Z,处于僵死状态,因为父进程一直没有回收它,它将一直占用内存。
尝试用kill命令杀死僵死的子进程

可以看到,kill子进程无效。为什么?
僵尸进程要等到父进程结束,或者重启系统才可以被释放。fork 7 中父进程被挂起(CTRL+Z),处于停止状态,但一直没有结束。该子进程是僵尸进程,此时进程已经释放所有的资源,但是没有被父进程释放,因此kill子进程无效。

发送信号9(SIGKILL)给父进程,将挂起的父进程杀死

$ kill -9 23541


可以看到,父进程被杀死后,子进程也被杀死了。

fork8

子进程输出语句后一直进行while循环,父进程输出语句后结束。与fork7不同的是,虽然子进程一直在执行,但Shell命令会在父进程结束后执行。

可以看到子进程一直处于运行状态。

fork9

wait(&child_status)父进程需等待子进程结束后才继续能执行,CT语句一定在最后输出。

fork10
exit(100+i);子进程的退出码分别为100、101、102、104、105,waitpid(pid[i], &child_status, 0);获取子进程结束的状态值,某一子进程结束后输出其PID和退出码。
(fork11与其类似)

fork函数结果分析相关推荐

  1. 1640_MIT 6.828 fork函数的功能以及相关代码分析

    全部学习汇总: GitHub - GreyZhang/g_unix: some basic learning about unix operating system. 继续分析之前看到的一段代码,先梳 ...

  2. fork是linux函数吗,linux fork()函数

    概述 最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思考加深了理解.现总结如下: 1.函数本身 (1)头文件 #include #include (2)函数原型 pid_t fo ...

  3. Linux多进程拷贝fork,浅析linux中fork函数

    Linux通过clone()系统调用实现fork().vfork()和__clone()库函数创建新的进程,这个调用通过一系列的参数标志来指明父子进程的共享资源,终将各自的参数标志位传递给clone, ...

  4. linux fork函数的精辟解说

    此文原文来源于一个blog,文章的名称为:linux fork函数的精辟解说原文地址:http://blog.chinaunix.net/space.php?uid=12461657&do=b ...

  5. 浅显理解*nix下的守护进程机制及fork函数

    最近空闲时间重新仔细看了一下memcached的使用说明文档,硬着头皮看了一点源码,有时候看到一些晦涩的c函数感觉实在恍惚只能跳过.不过也不算是全无收获,终于LZ还敢再看c语言,终于LZ又看起了c语言 ...

  6. Linux中fork函数详解

     一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不 ...

  7. fork函数产生进程

    Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册 hhktonybutbueatiful.blog.chinaunix.net 目标赋予我们生命的意义和目的.有了目标,我们才会 ...

  8. linux c控制进程并发量,浅谈Linux环境下并发编程中C语言fork()函数的使用

    由fork创建的新进程被称为子进程(child process).fork函数被调用一次,但返回两次.子进程的返回值是0,而父进程的返回值则是新进程的进程ID.将子进程ID返回给父进程的理由是:因为一 ...

  9. linux中fork函数及子进程父进程执行顺序

    目录 一.fork入门知识 二.fork进阶知识 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以 ...

  10. 操作系统---fork函数解析与例题详解

    fork的基本知识 函数原型:pid_t fork( void); 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID:否则,出错返回-1 一个现有进程可以调用fork函数创建一 ...

最新文章

  1. 如何估算代码量_如何估算焊锡膏的印刷量?
  2. 计算机课做ppt的软件有哪些内容,课程内容计算机软件的基础知识.ppt
  3. PAT甲级1001.A+B Format(20)
  4. IOS文本框readonly时焦点事件
  5. 数据仓库-数据仓库的简介(由来、与关系数据库的区别、数据仓库模型)
  6. 开发资源库(repositiory)
  7. linux命令查看g 版本,如何查看linux版本
  8. mysql explain用法和结果的含义
  9. java path 注解_@PathVariable注解的使用和@Requestparam
  10. python2.0_day19_后台数据库设计思路
  11. form表单回车提交问题,JS监听回车事件
  12. idea报错命令行过长
  13. rhel 5.3 nis 服务器搭建 详细(原创)
  14. 庆贺使用VS2017编译OpenJDK12成功!
  15. ThinkPHP 漏洞利用工具
  16. 华为eNSP基本操作
  17. 红帽linux挑战赛题目,红帽Linux挑战赛模拟题
  18. 人脸识别活体检测技术讨论:基于背景人脸相对运动的活体判断方法
  19. matlab怎么分析数据,MATLAB应用——数据分析与统计
  20. 【SAP Basis】SAP用户账号管理

热门文章

  1. 阿里巴巴交易平台技术揭秘
  2. Python3.WRF的投影转换
  3. 技能梳理27@体感机械臂
  4. “2库1平台+N应用”助力智慧机场建设
  5. java初级简历模板
  6. 【正点原子STM32连载】第七章 认识HAL库 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  7. MAC地址厂商查询网址
  8. html5+前端脸部识别采集,前端人脸识别框架Tracking.js
  9. javaEE学习笔记—————利用代理模式和过滤器增强对象功能完成敏感词汇过滤功能
  10. 网管员应该掌握好的学习方法