博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于fork有意思的两道题目
阅读量:6922 次
发布时间:2019-06-27

本文共 937 字,大约阅读时间需要 3 分钟。

http://www.spongeliu.com/123.html

 

第一题,计算下面代码理论上总共打印了多少行:(网易2011笔试题)

 
#include#include#includeint main(){        int i;        for(i = 0; i<5; i++){                fork();                printf("%d\n",getpid());                fflush(stdout);        }}

 

这道问题并不难,最快的想法就是2+4+8+16+32,因为第一层的printf会有两个进程打印,第二层会增加到4个,以此往下,就得出62行。

 

第二题:问下面的代码执行后总共产生了多少进程(不包括主进程)?(2009 EMC笔试)

#includeint main(){        fork();        fork() && fork() || fork();        fork();}

 

让我们仍然采用上题的算法,使用一个队列:首先,将主进程产生子进程的位置放到队列中:queue = " A B C E ";sum = 0;我们从队列中取首元素A,我们分析A处产生的进程,发现它会在B, C, E三处产生子进程,我们把这三个元素插入到队列中,并将sum+1。queue = " B C E B C E "sum ++;然后,我们从队列中取出首元素B,B处产生的子进程稍稍不一样,因为子进程中B所代表的fork()返回值为0,因此C得不到执行,而D会得到执行。因此,B处产生的子进程会执行D, E,将这两个元素送入队列,sum++:queue = " C E B C E D E "sum ++;下面,我们取首元素C,分析发现,C处产生的进程会执行D, E,送入队列并且sum++:queue = " E B C E D E D E "sum ++;同上一题一样,依次这样执行,遇到E则没有元素入队列,直到最后队列为空,sum就是总共产生的进程个数。

 

 

转载于:https://www.cnblogs.com/charlesblc/p/6265292.html

你可能感兴趣的文章
Android开发之布局
查看>>
子层div浮动导致父层无法自适应高度的解决方法
查看>>
Linux 系统/运维面试总结
查看>>
Java对象的浅克隆
查看>>
linux服务器上安装Mysql数据库
查看>>
mysql kernel: nf_conntrack version 0.5.0
查看>>
每天都在记录新事物
查看>>
Python环境安装
查看>>
墙壁网线插座风波
查看>>
我的友情链接
查看>>
iOS内存暴增问题追查与使用陷阱
查看>>
MySQL 数据库上线后根据 status 状态优化
查看>>
win10重建图标缓存bat
查看>>
我的友情链接
查看>>
线程中一种超时机制的实现
查看>>
linux grep命令 (学习备份)
查看>>
大数据时代邮件服务器如何满足发展所需
查看>>
使用SecureCRT秘钥登录服务器
查看>>
vim支持+python和+python3切换
查看>>
基于heartbeatV2版本的ha-gui工具对httpd做高可用集群(2)
查看>>