第一题:

//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. Spring AOP和事务的相关陷阱

    1.前言 2.嵌套方法拦截失效 2.1 问题场景 2.2 解决方案 2.3 原因分析 2.3.1 原理 2.3.2 源代码分析 3.Spring事务在多线程环境下失效 3.1 问题场景 3.2 解决方 ...

  2. 【npm start 启动失败】ubuntu 将node和npm同时更新到最新的稳定版本

    https://blog.csdn.net/u010277553/article/details/80938829 npm start 启动失败,报错如下 错误提示 make sure you hav ...

  3. SKBUFFER详解

    纯属转载,不敢侵犯别人产权!! 一. SKB_BUFF的基本概念1. 一个完整的skb buff组成(1) struct sk_buff--用于维护socket buffer状态和描述信息(2) he ...

  4. Numpy包简单介绍

    详细介绍可以看Numpy帮助,也有很多资料,此文仅是一个简述性质的集成文章 1.简介 Numpy是Python的一个扩展包,语法和Matlab有很多相似之处.它支持高维数组和矩阵运算,也提供了许多数组 ...

  5. Java游戏服务器成长之路——弱联网游戏篇(源码分析)

    前言 前段时间由于公司的一款弱联网游戏急着上线,没能及时分享,现在基本做的差不多,剩下的就是测试阶段了(本来说元旦来分享一下服务器技术的).公司的这款游戏已经上线一年多了,在我来之前一直都是单机版本, ...

  6. mysql数据库优化的几种方法

    1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽 ...

  7. C++必知必会

    C++ Common knowledge Essential Intermediate Programming C++必知必会 [美] StephenC.Dewhurst 著  荣耀 译  人民邮电出 ...

  8. javascript 闭包 内存

  9. 百度nlp实习生转岗(猝)

    一面: 大部分是问项目相关的.只记住了几个关键的问题. 1.手写快排 2.生成模型与判别模型的区别 分类问题:2种形式: F(x)=y p(y|x) 生成模型:由数据学习联合分布概率p(x,y),然后 ...

  10. Spring MVC 复习笔记01

    1. springmvc框架 1.1 什么是springmvc spring mvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合.spring mvc是一个 ...