进程fork分析;l

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

#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后,主进程和子进程都会一直向下运行(如果主或子中途不退出的话),于是上面的代码便可用下面的代码替换

 

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
	pid_t pid1;
	pid_t pid2;
	pid1= fork();
	if(pid1 == 0) // son
	{
		pid2= fork();
		if(pid2 = = 0) //son of son
		{
		
		}
	}
	pid2= fork();
	if(pid2 == 0) //the second son of root
	{

	}
	else //is the root
	
}


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

//

//

 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值