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代码, ...
随机推荐
- 听课笔记--DP--最大子矩阵和
最大子矩阵问题 给定一个n*n(0<n<=120)的矩阵, 矩阵内元素有正有负, 请找到此矩阵的内部元素和最大的子矩阵 样例输入: 4 0 -2 -7 0 9 2 -6 2 -4 ...
- default(Nullable(type)) vs default(type)
default(Nullable<long>) == null default(long?) == null default(long) == 0L
- Python中的内存管理机制
Python是如何进行内存管理的 python引用了一个内存池(memory pool)机制,即pymalloc机制,用于管理对小块内存的申请和释放 1.介绍 python和其他高级语言一样,会进行自 ...
- ES date_histogram 聚合
如下 GET cars/index/_search { "size":0, "aggs": { "sales": { "date_ ...
- TightVNC安装
软件版本:tightvnc-2.8.8-gpl-setup-64bit.msi 后面一路默认,虚拟机端口默认从5900开始递增.
- 索引 _id
_id索引是绝大多数集合默认建立的索引,对于每个插入的数据,mongodb都会自动生成一条唯一的_id字段 增加一个数据 > db.test2.insert({x:1}) WriteResult ...
- Python一些细节
1.python set() dict() 有序问题,不同版本之间的差异,与Java/C++的对比 https://www.cnblogs.com/niuxichuan/p/11608386.html ...
- api文档设计工具:RAML、Swagger
api文档设计工具是用来描述和辅助API开发的. 一.RAML https://raml.org/ https://wenku.baidu.com/view/9523238d5ef7ba0d4b733 ...
- linux实操_shell判断语句
常用判断条件: (1)两个数的比较 = 字符串的比较 -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于 (2)按照文件权限进行判断 -r 有读的权限 -w ...
- HTTP请求处理流程、IHttphandler、IHttpModule
一.ASP.NET处理管道 Asp.net处理管道的第一步是创建HttpWorkerRequest对象,它包含于当前请求有关的所有信息. HttpWorkerRequest把请求传递给HttpRunt ...