一道关于 fork 的笔试题
题目
阅读下面的代码,显示终端会打印出几个 hello world?
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>int main()
{fork();fork();fork();printf("hello world\n");exit(0);
}
答案是多少呢?我们一起分析一下。
原理分析
关于 fork
fork() 函数会创建一个新的子进程。子进程得到与父进程用户级虚拟地址空间相同的一份副本,包括代码段数据段、堆、共享库、用户栈等。
fork 调用一次,返回两次:一次是返回到父进程。一次是返回到新创建的子进程。调用返回后,父进程和子进程各自继续执行后边的指令。
父进程和子进程并发独立运行,内核能够以任意方式交替执行它们的指令。
父进程和子进程有相同但是独立的地址空间。
父进程和子进程之间共享文件。即子进程会继承父进程所有打开的文件。
fork 嵌套分析
我们可以通过画图,来理解带有嵌套 fork 调用的程序。
为了方便看出是哪个 fork 执行,在图中用标号进行了标注。
第一个 fork 执行了 1 次。第二 fork 执行了 2 次,第三个 fork 执行了 4 次。最终有 8 个进程运行程序。
从而 printf 函数被调用了 8 次。
结果
根据以上分析可知,代码最终打印 8 次 hello world。
我们可以在 PC 上验证一下,编译、执行后的输出结果:
$ gcc fork.c
$ ./a.out
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
实际结果与分析相同。
看来 fork() 不仅要会用,还要理解其背后的原理,还有就是掌握分析问题的方法。
如此,才能在遇到的问题的时候,从容不迫。
加油~
一道关于 fork 的笔试题相关推荐
- java笔试题_一道简单的 Java 笔试题,但值得很多人反思
专注于Java领域优质技术,欢迎关注 作者:匿蟒 前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问 ...
- 分享一道蚂蚁金服笔试题
之前有个朋友面试蚂蚁金服p7,他的笔试题我要了过来,我觉得这道题目还是比较经典的,有兴趣的朋友不妨先拿来热热身. 实现转账系统,给外部系统提供账户开户,充值,转账rpc服务,要求如下,- 账户类设计: ...
- 【转】一个关于fork()的笔试题,考了好几遍,终于找到答案了
笔试至少3次见到这个题,都是瞎编的,今天群里有人问,然后有人放出了这个地址:http://coolshell.cn/articles/7965.html,让我恍然大明白,豁然好脾气. 感谢这位陈皓同学 ...
- python 数据类笔试题_一道 Python 类的笔试题详解
r = {} class C(object): def __init__(self, a, b): self.a = a self.b = b if b == 'a': orig = super(C, ...
- 一道有趣的微软笔试题
老师d 的物理测验答案在教室里丢失了,今天那个教室上了5 堂课,老师d 上了3 堂,有可 能是a.b.c 三个同学盗窃 已知:1.a 上了两堂课 2.b 上了三堂课 3.c 上了四堂课 4.a.b.c ...
- 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...
难度较高,阅读时间大概 28 分钟 这是数论的第二篇,在<素数筛法>中,我们重温了素数这个数学定义,并且给出了区别于教科书上更高效的 Eratosthenes 筛法和欧拉线性筛.这篇文会从 ...
- 软件测试5分钟解决银行借贷笔试题
在网上看到这样一道题 同学们面试的时候,80%的同学总是会被要求做笔试题,而笔试题中的重中之重就是:用例设计题. 用例设计题的方法离不开这4大方法:等价类.边界值.错误推测法.场景法.所以任何用例设计 ...
- 一道指针压轴笔试题讲解 (进阶指针必看)
今天我来给大家讲解一道指针压轴笔试题,同时也是进阶指针知识必会的一道题.相信大家在认真梳理清楚这道题后,对指针的知识了解定会更上一层楼 ~ 话不多说,上题目 : 请问程序输出结果是什么 ? 相信大家一 ...
- 给定一个数值,输出符合中国人习惯的读法--记一道笔试题
题目:给定一个数字,最大小于一万亿,输出符合中国人习惯的读法,例如: a.12输出:十二 b.102输出:一百零二 c.1002输出:一千零二 d.112输出:一百十二 e.10112输出:一万零一百 ...
最新文章
- 在数据库恢复之前将数据库置为单用户模式
- 念 2013-8-6 (写于爸爸走之后,之七)
- 分享一下cookies操作(增、删、改、查)小经验
- 概念设计师凌云:《蜘蛛侠:平行宇宙》和《证人》美术浅析
- 印度电工,真牛!上天入海,无所不能...
- 如何配置能让fiddler抓去https的请求?
- 看了新闻,思科研发中心 没有成都的。。。
- 常用的python脚本_五个python常用运维脚本面试题实例
- python 操作系统学习_操作系统学习
- 阿里云搭建图片服务器,图片资源服务器搭建
- 事情又没有后续,吾真想质问头目,汝是为吾干活吗?
- 杨志便嗔道 瑞星杀毒软件序列号
- java代码混淆(使用 ProGuard maven插件)
- 单干必备:论嵌入式模块化编程、驱动分离的重要性
- 【机器学习】10:朴素贝叶斯做文本分类
- 资源调度有什么技术难点?
- OSChina 周五乱弹 ——程序猿到底算不算歧视
- 1025 反转链表 (25 分)
- genicam 相机java,机器视觉必知-GenICam相机通用接口标准
- 【Python】Python之end()关键字使用