系统调用分析:fork

网上看到的一个文章,我自己好好分析了下:

#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { pid_t pid1; pid_t pid2; pid1= fork(); pid2= fork(); printf("pid1:%d, pid2:%d/n", pid1, pid2); }

要求如下:

已知从这个程序执行到这个程序的所有进程结束这个时间段内,没有其它新进程执行。

1、请说出执行这个程序后,将一共运行几个进程。

2、如果其中一个进程的输出结果是“pid1:1001, pid2:1002”,写出其他进程的输出结果(不考虑进程执行顺序)。

 

这个题目唯一不同的地方就是,这个程序连续两次fork了,那么结果会是什么样的呢?

解决这个问题需要注意的一点就是:一个进程fork后,主进程和子进程都会一直向下运行(如果主或子中途不退出的话),于是上面的代码便可用下面的代码替换

 

  1. #include <stdio.h>  
  2. #include <sys/types.h>  
  3. #include <unistd.h>  
  4. int main()  
  5. {  
  6.     pid_t pid1;  
  7.     pid_t pid2;  
  8.     pid1= fork();  
  9.     if(pid1 == 0) // son  
  10.     {  
  11.         pid2= fork();  
  12.         if(pid2 = = 0) //son of son  
  13.         {  
  14.           
  15.         }  
  16.     }  
  17.     pid2= fork();  
  18.     if(pid2 == 0) //the second son of root  
  19.     {  
  20.   
  21.     }  
  22.     else //is the root  
  23.       
  24. }  


//如果程序按照注释那样执行,有一个条件,就是子进程创建后是父进程先运行

引用:http://blog.csdn.net/yuwenliang/article/details/5209239

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值