第一题:

  1. //fork1.c
  2. #include <unistd.h>
  3. #include <stdio.h>
  4.  
  5. int main(void)
  6. {
  7. int i = ;
  8. for(i = ; i < ; i++) {
  9. pid_t fpid = fork();
  10. if(fpid == ) {
  11. printf("son\n");
  12. break;
  13. } else {
  14. printf("father\n");
  15. }
  16. }
  17. sleep();
  18. return ;
  19.  
  20. }
  21.  
  22. //fork2.c
  23. #include <unistd.h>
  24. #include <stdio.h>
  25.  
  26. int main(void)
  27. {
  28. int i = ;
  29. for(i = ; i < ; i++){
  30. pid_t fpid = fork();
  31. if(fpid == ) {
  32. printf("son\n");
  33. //break; 差别
  34. } else {
  35. printf("father\n");
  36.  }
  37. }
  38.   sleep();
  39. return ;
  40.  
  41. }
  42. [root@localhost mytest]# gcc fork1.c -o fork1
  43. [root@localhost mytest]# ./fork1
  44. father
  45. son
  46. son
  47. father
  48. father
  49. son
  50.  
  51. [root@localhost ~]# pstree -p | grep fork1
  52. |-sshd()-+-sshd()---bash()---fork1()-+-fork1()
  53. | | |-fork1()
  54. | | `-fork1()
  55.  
  56. [root@localhost mytest]# ./fork2
  57. father
  58. son
  59. father
  60. father
  61. father
  62. son
  63. father
  64. son
  65. father
  66. son
  67. son
  68. son
  69. father
  70. son
  71.  
  72. [root@localhost mytest]# pstree -p | grep fork2
  73. |-sshd()-+-sshd()---bash()---fork2()-+-fork2()-+-fork2()---fork2()
  74. | | | `-fork2()
  75. | | |-fork2()---fork2()
  76. | | `-fork2()
  77. [root@localhost mytest]#

第二题:

  1. #include <unistd.h>
  2. #include <stdio.h>
  3.  
  4. int main(void)
  5. {
  6. pid_t pid1;
  7. pid_t pid2;
  8.  
  9. pid1 = fork();
  10. pid2 = fork();
  11.  
  12. printf("pid1=%d pid2=%d\n", pid1, pid2);
  13. sleep();
  14. return ;
  15.  
  16. }
  17.  
  18. [root@localhost mytest]# ./fork3
  19. pid1= pid2=
  20. pid1= pid2=
  21. pid1= pid2=
  22. pid1= pid2=
  23.  
  24. [root@localhost mytest]# pstree -p | grep fork3
  25. |-sshd()-+-sshd()---bash()---fork3()-+-fork3()---fork3()
  26. | | `-fork3()

用树状图表示更清晰些:

第三题:

  1. #include <unistd.h>
  2. #include <stdio.h>
  3.  
  4. int main(void)
  5. {
  6.  
  7. fork() && fork() || fork();
  8. return ;
  9.  
  10. }

这个题考察了两个知识点:逻辑运算符特点与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个叶子节点)。

第四题:

  1. #include <unistd.h>
  2. #include <stdio.h>
  3.  
  4. int main(void)
  5. {
  6.  
  7. fork();
  8. fork() && fork() || fork();
  9. fork();
  10. 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. flask建立数据模型数据类型

    https://blog.csdn.net/happyanger6/article/details/53947162 https://blog.csdn.net/happyanger6/article ...

  2. 【转】dd命令详解及利用dd测试磁盘性能

    dd命令详解及利用dd测试磁盘性能   linux下dd命令详解 名称: dd 使用权限: 所有使用者 manpage 定义: convert and copy a file 使用方式: dd [op ...

  3. window下cmd的宽度调整

    一直被cmd的宽度这么了好些年,刚才搜索了下,还真可以设置.标题栏右键属性,调整屏幕缓冲区宽度,只要足够长就不会换行了,然后调整窗口大小-宽度,不能超过屏幕缓冲区宽度,当小于屏幕缓冲区的时候,就会显示 ...

  4. AndroidStudio修改常用快捷键

    近期公司开发工具要从eclipse转向Androidstudio,安装好as后当然迫不及待地要将快捷键修改为eclipse中的快捷键啦,下面是个人的一些小的总结. 1.首先当然要打开快捷键的设置界面啦 ...

  5. go学习笔记二:运行使用命令行参数

    本文只作为博主的go语言学习笔记. 对命令行参数的解析,只是在运行时使用的,比如以下命令:go run gomain -conf conf.toml 没有办法再go build时使用. 一.运行时命令 ...

  6. IPython的基本功能(转)

    原文:http://kochiya.me/www/posts/Ipython!.html 前几天偶然在公司内网上拖了一本 Learning IPython for Interactive Comput ...

  7. python3.6.1 安装PyQt5,以及配置QTDesigner,PyUIC

    本人主机win10 64,python版本是3.6.1 64 注意python版本一定得是3.6.1 64位的,我原来电脑是安装的32位的,浪费了好长时间 (MMP) 第一步:安装python,自己官 ...

  8. Spark2.0机器学习系列之7: MLPC(多层神经网络)

    Spark2.0 MLPC(多层神经网络分类器)算法概述 MultilayerPerceptronClassifier(MLPC)这是一个基于前馈神经网络的分类器,它是一种在输入层与输出层之间含有一层 ...

  9. Python 集合(set)的使用总结

    集合的特点:去重.无序,因此无法通过下标取值. 1. 定义集合 s = set() #定义空的集合 s2 = {'} # 不是key -value形式的话就是集合,不是字典 s3 ={'} print ...

  10. 【转】Google的2012论文

    转自:http://www.sigvc.org/bbs/thread-1152-1-1.html Google的论文一直是业界的风向标,尤其在机器学习.分布式系统.网络等方面很多创新性的成果都是由他们 ...