fok函数
一、fork函数是什么
fork函数将运行着的程序分成2个(几乎)完全一样的进程。如下图:

进程1在进程关系中我们称之为父进程,进程2就是通过fork产生的,我们叫他子进程。这两个进程在fork执行完之后继续独立进行,但是子进程的fork返回值为0,父进程的fork返回值为子进程的pid(进程id,在PCB中定义),知道了这些,我们现在研究一些关于fork的简单代码。
a:

如上图,最终输出结果是什么呢?
执行if(fork() || fork())这一句时,先fork第一个进程(取名进程1),原进程与新进程1同时进行,原进程的fork()返回值"!0",所以打印A。进程1的fork()返回值为0,所以判断或语句的后一个fork(),进程1fork一个进程(取名进程2),此时进程1、2、也同时运行。进程1的fork()返回值为"!0",所以打印A。进程2的fork()返回值为0,所以打印B。结果为 AAB,但顺序未知。为什么结果未知呢?因为每一个子进程与父进程在fork完成之后都是独立进行互不干扰的,所以不一定谁先结束,但是理论上是父进程快于子进程。


b:

如上图,最终输出结果是什么呢?
i=0时进入循环,执行fork,先fork一个子进程(取名进程1),此时原进程打印A,进程1打印B。i=1时,原进程fork一个新进程(取名进程2),此时原进程打印A,进程2进程打印B;同时进程1fork一个新进程(取名进程3),进程1打印A,进程3打印B。打印A或B都是通过fork的返回值来判断的,所以还是那句话:子进程返回0,父进程返回子进程的pid。从而得到结果,三个A,三个B,但是顺序不一定,理由前文已经解释过。


fok函数的更多相关文章
- php的header()函数前有echo输出情况分析
php的header()方法一般被用来告知浏览器做一些什么样的操作,比如跳转,刷新等等:而调用header方法前,如果使用echo输出一些内容,会发生什么情况呢?会对header函数有影响吗?我们实验 ...
- UNICODE和ANSI字符串的转换(解释了MultiByteToWideChar,WideCharToMultiByte,GetTextCharsetInfo,GetTextCharset,IsDBCSLeadByte,IsDBCSLeadByteEx,IsTextUnicode一共7个函数)
继上集故事<多字符集(ANSI)和UNICODE及字符串处理方式准则 >,我们现在有一些特殊需求: 有时候我们的字符串是多字符型,我们却需要使用宽字符型:有的时候却恰恰相反. Window ...
- MySql 利用函数 查询所有子节点
前提:mysql 函数 find_in_set(str,strlist), cast(value as type) 一.find_in_set(str,strlist):如果字符串str是在的 ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- C++对C的函数拓展
一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- javascript中的this与函数讲解
前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...
随机推荐
- 决心学HTML 第一晚
老师数他的审美观不行,怕教的我们的审美观也不行,所以,就不讲HTML了,但是期末又要考, 自己英语又不行,期末做项目又要用,我可能又要做组长,只能硬着头皮自学了. 所以,现在从第一页开始学!!! 这这 ...
- POJ1988(Cube Stacking)--并查集
题目链接:http://poj.org/problem?id=1988 题意:有n个元素,开始每个元素各自在一个栈中,有两种操作,将含有元素x的栈放在含有y的栈的顶端,合并为一个栈. 第二种操作是询问 ...
- 记一次Git提交报错的问题
通常代码版本控制的步骤是: 在代码版本控制平台新建一个仓库 clone远程仓库到本地 开始编码,然后是一系列add,commit,push 我的步骤是: 在远程代码版本管理平台新建一个仓库 在本地新建 ...
- 报错/Warning: You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored
这个报错在以下情形会出现 第一种 <Switch> <Route exact path="/home/index" component={HomeIndex} / ...
- JS与JQuery的一些对比
主页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- zabbix-将业务机器加入到监控中
一.设置被监控的机器 1. 配置主机名 echo "agent.test.com" > /etc/hostname hostname agent.test.com 2.安装z ...
- gitlab中的几个常用界面(runner管理、gitlab-ci.yml管理、runner token管理、新建用户、拉用户入工程、拉用户入组、复制工程导入组)
目录: 1.runner管理 2.gitlab-ci.yml管理 3.runner token管理 4.新建用户 5.拉用户入工程 6.拉用户入组 7.复制工程导入组 1.runners界面 http ...
- 《形式化分析工具Scyther性能研究》------摘抄整理
本篇论文的主要创新点在--------使用 Scyther工具发现对部分 KCI攻击搜索出现漏报的现象,并给出了存在的原因, 介绍了 形式化分析工具 AVispa全称是 Automated V ...
- oss打包下载
private static final String OSS_ENDPOINT = PropertiesUtil.getString("oss.endpoint"); priva ...
- 在stm32开发可以调用c标准库的排序和查找 qsort bsearch
在嵌入式开发中,可以使用c标准库自带的库函数,而不用自己去早轮子,qsort 和bsearch就是其中的两个比较好用的 二分法查找,前提是已经排序好的数据.下面的代码, 如果数据为排序,则要进行排序后 ...