zoukankan      html  css  js  c++  java
  • 关于《一个fork的面试题》

    关于《一个fork的面试题》

    刚才在总结APUE第八章内容的时候,偶然联想起了以前在酷壳看到的一篇广为转载的blog--《一个fork的面试题》。其中关于这个问题的解释方式不是很符合 我的思维习惯 ,因此写了这篇文章并扩展一下《fork面试题》的问题。

      现有如下C程序:

      经过gcc fork.c编译,在当前目录下运行./a.out,请问输出多少个"-"。

      原文明确的给出了答案是8个。因为在终端交互模式下,printf的默认缓冲模式是行缓冲。而原程序的printf没有换行,所以造成如下情况:

      图中4157,4158,4159,4160均代表进程ID。

      画一下进程树,按顺序走一遍代码,就能够理解了(假设进程执行顺序与代码顺序相同即可,此处进程执行顺序不影响输出结果)。

      详细原理见APUE  p110 5.4缓冲和p172 8.3 fork函数两节。

      这个问题还有以下的变种:

      问题1:若变成printf("-\n"),那么./a.out会输出什么?

      问题2:若变成printf("-\n"),且运行./a.out > output.txt,输出会是什么?

      若程序改成如下,又会输出什么。对下面的程序应用上面的问题1和问题2,输出又会是什么?

      

      BTW:记录一下Shell版本的fork bomb

    :(){ :|:&};:   
     
     
    分类: 偶然联想
    标签: 联想一下
  • 相关阅读:
    201771010101 白玛次仁 《2018面向对象程序设计(Java)》第七周学习总结
    201771010101 白玛次仁 《2018面向对象程序设计(Java)课程学习进度条》
    实验六201771010101 白玛次仁
    第七周作业
    第七周上机练习
    第六周作业
    第六周上机练习
    第五周上机作业
    Java第四周作业
    Java第四次作业
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3045994.html
Copyright © 2011-2022 走看看