linux环境编程之 fork() || fork()
来源:互联网 发布:如何雇佣网络水军 编辑:程序博客网 时间:2024/04/18 21:20
由一个面试题关联到的:
int main{
fork() || fork()
}
逻辑上一共创建了多少个进程(包括父进程)?
答案是三个!
分析如下:
你肯定想到了 || 的运算特性,前面的fork返回子进程号,不为0执行结束,万事大吉,所以结束了,一共创建了2个进程嘛!
但是fork对父子进程都会有返回值的,父进程返回子进程的PID,子进程返回0!
那么左边fork的子进程返回的是0也就造成了子进程的 || 还要计算后面的fork,所以子进程fork了一个进程。
所以一共三个。
但是我没运行出来,正常输出,然后就卡住了。不知道为什么。
然后将每个进程的PID打印出来看:
父进程PID是4840,执行之后退出,子进程PID应该是4841,孙子进程PID应该是4842.
按照上面的结果来看:父进程打印后就结束了,没有等待子进程,子进程创建了孙子进程,孙子进程先执行打印后结束,此时子进程才执行,执行后就等待了。
此时的子进程实际上成为了孤儿进程!而且我没有将这个孤儿过继给init,所以他就一直在那儿哭?
因为它的父进程已经退出了,那么加上wait语句试一下,让父进程等待所有的子进程(其中包含子进程等待孙子进程,本例中):
程序正常了。
也就是所有的父进程等待子进程结束后才退出。
下面把程序改一下,输出特定的信息,利于观察:
得到的结果是:
可以看到每个父进程只等待子进程结束,孙子进程因为没有子进程所以wait返回-1表示出错。
子进程返回孙子进程PID,父进程返回子进程PID。
如有错误,请一定指出。
0 0
- linux环境编程之 fork() || fork()
- linux环境高级编程之fork、getpid、getppid函数
- 【linux】fork() && fork() || fork()
- Linux环境 fork() 解析
- Linux进程控制编程之fork、wait
- Linux系统编程-fork
- linux学习之fork
- linux之fork
- Linux之fork函数
- Linux之fork函数
- Linux环境编程--waitpid与fork与execlp
- Linux环境编程--waitpid与fork与execlp与system
- Linux C编程--fork()详解
- linux fork signal 编程实例
- linux编程|fork函数讲解
- linux编程|fork函数讲解
- Linux系统编程-----进程fork()
- Linux之fork()函数
- 【poj 2531】Network Saboteur 题意&题解&代码(C++)
- MVC设计模式
- 14. 核心动画
- CSDN与博客园博文基本同步
- Android studio导入第三方项目(以Volley为例)
- linux环境编程之 fork() || fork()
- [疯狂Java]TCP:TCP协议的概念、Socket通信、超时等待
- 15.UIDynamic 物理引擎
- 学习google编程风格
- 使用include标签引入布局
- 精华阅读第 9 期 |滴滴出行 iOS 客户端架构演进之路
- Android startActivity源码详解
- xfire web service导致cpu100%问题分析
- LintCode 删除链表中等于给定值val的所有节点