一个循环里fork出的子进程个数
2014-03-17 16:01
127 查看
[lizhe@localhost fork]$ ./exe
pid:4071
------
问以下代码的执行结果
结果如下,有点吃惊
pid:0
pid:4072
------
------
pid:4074
------
pid:4073
------
pid:0
------
pid:0
------
pid:4077
------
pid:0
------
pid:0
------
pid:4078
------
pid:0
------
pid:4079
------
pid:0
------
原来,每次fork一个子进程后,它都分享父进程的内存区域,所以每个fork出的子进程会接着执行循环。
执行第一次的时候,fork出一个进程,第二次执行的时候,连同上次的子进程也会产生子进程,故而1变2,2变4,4变8......
循环执行n次后总共有2的n次方个进程,新进程数则为2的n次方减1.
由于每个进程都要执行一次printf语句,故printf总共执行的次数为2+4+8+16……本例的循环执行3次,printf了14次。
pid:4071
------
问以下代码的执行结果
#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(){ int pid=0; for(int i=0;i<3;i++){ pid=fork(); printf("pid:%d\n",pid); printf("------\n"); } }
结果如下,有点吃惊
pid:0
pid:4072
------
------
pid:4074
------
pid:4073
------
pid:0
------
pid:0
------
pid:4077
------
pid:0
------
pid:0
------
pid:4078
------
pid:0
------
pid:4079
------
pid:0
------
原来,每次fork一个子进程后,它都分享父进程的内存区域,所以每个fork出的子进程会接着执行循环。
执行第一次的时候,fork出一个进程,第二次执行的时候,连同上次的子进程也会产生子进程,故而1变2,2变4,4变8......
循环执行n次后总共有2的n次方个进程,新进程数则为2的n次方减1.
由于每个进程都要执行一次printf语句,故printf总共执行的次数为2+4+8+16……本例的循环执行3次,printf了14次。
相关文章推荐
- fork函数创建一个新进程
- 进程fork()两次---解决一个进程不必等待子进程终止,也不希望子进程处于僵死状态(一般是服务器进程fork())
- fork一个进程是什么鬼
- UNIX网络编程卷1 服务器程序设计范式1 并发服务器,为每个客户请求fork一个进程
- fork()调用的一个趣题--fork函数能生成几个子进程???
- 利用fork循环创建进程
- 使用python的os.fork()为一个主进程生成多个子进程
- UNIX网络编程卷1 server程序设计范式1 并发server,为每一个客户请求fork一个进程
- fork函数的返回值实际只有一个值,看似两个值是因为在不同的进程中返回
- UNIX环境高级编程有一个例子说fork两次可以避免产生僵死进程,我不知道,为什么fork两次就能避免僵死进程?
- Parallel::ForkManage: 一个简单的并行进程用于fork管理:
- 为何在一个fork的子进程分支中使用_exit函数而不使用exit函数?
- 循环中fork创建进程的个数
- 调用fork并使子进程建立一个新的会话
- 笔试题:循环fork产生的进程数
- fork()子进程复制父进程的缓冲区的一个例子
- fork 产生一个空的子进程
- fork()调用的一个趣题--fork函数能生成几个子进程???
- 一个进程 fork 多个子进程
- 一个进程 fork 多个子进程