第一题:

//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. JSONP使用

    一.什么是JSONP jsonp是一种规则,它是利用创建html的script快的方式,将远端url放到src属性中,并以函数的形式执行远程返回值中的函数. jsonp的出现是为了解决浏览器同源策略的 ...

  2. ShuffleNet

    ShuffleNet (An Extremely Efficient Convolutional Neural Network for Mobile Devices) —— Face++ shuffl ...

  3. embedded-redis在单元测试中的使用

    1 背景 参考链接:https://github.com/kstyrc/embedded-redis 2 使用 2.1 引入依赖 <dependency> <groupId>c ...

  4. Linux下桥接模式详解一

    注册博客园已经好长时间,一直以来也没有在上面写过文章,都是随意的记录在了未知笔记上,今天开始本着分享和学习的精神想把之前总结的笔记逐步分享到博客园,和大家一起学习,一起进步吧! 2016-09-20  ...

  5. git学习------>如何修改git已提交的记录中的Author和Email?

    一.背景 最近搭建好GitLab后,准备陆陆续续的将之前在SVN仓库中保存的代码迁移到GitLab上,昨天顺利将三个Android组件的代码迁移到GitLab后,其他同事发现迁移是成功了,但是pull ...

  6. Data striping

    条带化是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法. 当多个进程同时访问一个磁盘时,可能会出现磁盘冲突.大多数磁盘系统都对访问次数(每秒的 I/O 操作,IOPS ...

  7. JQuery能够高效地操作页面元素

    关于DOM和CSS的页面元素选择: $("span");     //全部span元素 $("#elem");  //id为elem的元素 $(".c ...

  8. python服务器环境搭建——安装相关软件

    在上一篇我们在本地的虚拟服务器上安装好CentOS7后,我们的python web服务.自定义的python service或python脚本需要在服务器上运行,还需要在服务器安装各种相关的软件才行, ...

  9. 使用QJM构建HDFS HA架构(2.2+)

    转载自:http://blog.csdn.net/a822631129/article/details/51313145 本文主要介绍HDFS HA特性,以及如何使用QJM(Quorum Journa ...

  10. Spring框架第三篇之基于XML的DI注入

    一.注入分类 Bean实例在调用无参构造器创建空值对象后,就要对Bean对象的属性进行初始化.初始化是由容器自动完成的,称为注入.根据注入方式的不同,常用的有两类:设值注入.构造注入.实现特定接口注入 ...