第一题:

//fork1.c
#include <unistd.h>
#include <stdio.h> int main(void)
{
int i = ;
for(i = ; i < ; i++) {
pid_t fpid = fork();
if(fpid == ) {
printf("son\n");
break;
} else {
printf("father\n");
}
}
sleep();
return ; } //fork2.c
#include <unistd.h>
#include <stdio.h> int main(void)
{
int i = ;
for(i = ; i < ; i++){
pid_t fpid = fork();
if(fpid == ) {
printf("son\n");
//break; 差别
} else {
printf("father\n");
 }
}
  sleep();
return ; }
[root@localhost mytest]# gcc fork1.c -o fork1
[root@localhost mytest]# ./fork1
father
son
son
father
father
son [root@localhost ~]# pstree -p | grep fork1
|-sshd()-+-sshd()---bash()---fork1()-+-fork1()
| | |-fork1()
| | `-fork1() [root@localhost mytest]# ./fork2
father
son
father
father
father
son
father
son
father
son
son
son
father
son [root@localhost mytest]# pstree -p | grep fork2
|-sshd()-+-sshd()---bash()---fork2()-+-fork2()-+-fork2()---fork2()
| | | `-fork2()
| | |-fork2()---fork2()
| | `-fork2()
[root@localhost mytest]#

第二题:

#include <unistd.h>
#include <stdio.h> int main(void)
{
pid_t pid1;
pid_t pid2; pid1 = fork();
pid2 = fork(); printf("pid1=%d pid2=%d\n", pid1, pid2);
sleep();
return ; } [root@localhost mytest]# ./fork3
pid1= pid2=
pid1= pid2=
pid1= pid2=
pid1= pid2= [root@localhost mytest]# pstree -p | grep fork3
|-sshd()-+-sshd()---bash()---fork3()-+-fork3()---fork3()
| | `-fork3()

用树状图表示更清晰些:

第三题:

#include <unistd.h>
#include <stdio.h> int main(void)
{ fork() && fork() || fork();
return ; }

这个题考察了两个知识点:逻辑运算符特点与fork()理解。

假如有表达式cond1 && cond2 || cond3,会怎样执行呢?

A、如果cond1为false,就不用判断cond2,而是直接判断cond3;

B、如果cond1为true,那么:

        a、如果cond2为true,就不会判断cond3;

        b、如果cond2为false,还需要判断cond3。

这样进程关系图如下:

这样,本程序创建了4个新进程,总共有5个进程(5个叶子节点)。

类似地,把代码改成fork() || fork() && fork(),那么程序会创建5个进程(5个叶子节点)。

第四题:

#include <unistd.h>
#include <stdio.h> int main(void)
{ fork();
fork() && fork() || fork();
fork();
return ;

第一行: 共2个进程;

第二行:共2*5=10个进程;

第三行:共2*10=20个进程。

这样,本程序总共有20个进程,其中创建了20-1=19个新进程。

fork有关趣味题的更多相关文章

  1. 算法训练 Hankson的趣味题

    算法训练 Hankson的趣味题   时间限制:1.0s   内存限制:64.0MB        问题描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Han ...

  2. 1172 Hankson 的趣味题[数论]

    1172 Hankson 的趣味题 2009年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Descrip ...

  3. 1172 Hankson 的趣味题

    1172 Hankson 的趣味题 2009年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Descrip ...

  4. Codevs 1172 Hankson 的趣味题 2009年NOIP全国联赛提高组

    1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Hanks 博 ...

  5. 一本通1626【例 2】Hankson 的趣味题

    1626:[例 2]Hankson 的趣味题 题目描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson 正在思考 ...

  6. 洛谷 P1072 Hankson 的趣味题 解题报告

    P1072 \(Hankson\)的趣味题 题目大意:已知有\(n\)组\(a0,a1,b0,b1\),求满足\((x,a0)=a1\),\([x,b0]=b1\)的\(x\)的个数. 数据范围:\( ...

  7. CH3201 Hankson的趣味题

    题意 3201 Hankson的趣味题 0x30「数学知识」例题 描述 Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson ...

  8. luogu P1072 Hankson的趣味题

    题目链接 luogu P1072 Hankson 的趣味题 题解 啊,还是noip的题好做 额,直接推式子就好了 \(gcd(x,a_0)=a_1=gcd(\frac{x}{a_1},\frac{a_ ...

  9. 洛谷P1072 Hankson 的趣味题

    P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...

随机推荐

  1. 完全用nosql轻松打造千万级数据量的微博系统

    其实微博是一个结构相对简单,但数据量却是很庞大的一种产品.标题所说的是千万级数据量也并不是一千万条微博信息而已,而是千万级订阅关系之间发布.在看 我这篇文章之前,大多数人都看过sina的杨卫华大牛的微 ...

  2. Python标准库 之 turtle(海龟绘图)

    turtle库介绍 首先,turtle库是一个点线面的简单图像库(也被人们成为海龟绘图),在Python2.6之后被引入进来,能够完成一些比较简单的几何图像可视化.它就像一个小乌龟,在一个横轴为x.纵 ...

  3. oracle入门(7)——存储过程

    [本文介绍] 熟悉了PL/SQL语法后,实现java调用oracle存储过程才是主要目的.本文将介绍如何写存储过程,java如何调用存储过程. [存储过程介绍] 抛开专业的描述,存储过程就是在数据库里 ...

  4. 简明python教程十----python标准库

    import sys def readfile(filename): 'Print a file to the standard output.' f=file(filename) while Tru ...

  5. SDUT3165:Round Robina(循环链表)

    题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=3165 题意分析: 比赛时这题没有A真伤心 ...

  6. [golang note] 内建类型

    基础类型 √ golang内建基础类型有布尔类型.整数类型.浮点类型.复数类型.字符串类型.字符类型和错误类型. 复合类型 √ golang支持的复合类型有指针.数组.数组切片.字典.通道.结构体和接 ...

  7. [Python] logging.logger

    <1>. mylogger = logging.getLogger("abc") logging.debug()/logging.info()/logging.warn ...

  8. selenium 代理 Cookies 截图 等待 调用JS

    改变用户代理 读取Cookies 调用Java Script Webdriver截图 页面等待 1. 改变用户代理 import org.junit.AfterClass; import org.ju ...

  9. Redhat 7.4更新为Centos7的yum并安装docker-ce

    以下命令请在root下执行 #删除原有的yum rpm -qa|grep yum|xargs rpm -e --nodeps #install centos yum #wget http://mirr ...

  10. SSH的加入顺序*(转)

    首先创建一个 New  =>  Web Project  起名 demo 然后在项目名称上 点击鼠标右键 选择 MyEclipse => Add Speing Capabilites... ...