针对fork()函数的深入理解!用事例family家谱来进行说明!
2012-04-14 14:07
399 查看
通过这段时间的学习,对fork()这个创建进程的函数进行深入的理解,通过一个family一个进程家谱进行查看进程与进程直接的关系。
首先要创建一个进程作为 爷爷 -> 父亲 -> 儿子
-> 女儿
->叔叔
->姑姑
通过一个三代的家谱来说明fork()函数在创建进程的时候是怎么确定进程关系的。
下面看代码部分:
#include<stdlib.h>
#include<stdio.h>
int main()
{
pid_t pid;
pid=fork();
if(pid==-1)
{
printf("error!\n");
exit(1);
}
else if(pid==0)
{
pid_t pid_1;
pid_1=fork();
printf("this is father!\n");
if(pid_1==-1)
{
printf("error!\n");
}
else if(pid_1==0)
{
printf("this is sunzi\n");
while(1);
}
else
{
printf("this is secend grandfather!\n");
pid_t pid4;
pid4=fork();
if(pid4==-1)
{
printf("error!\n");
}
else if(pid4==0)
{
printf("this is nuncle!\n");
while(1);
}
else
{
while(1);
}
while(1);
}
while(1);
}
else
{
printf("this is unt!\n");
pid_t pid2,pid3;
pid2=fork();
if(pid2==-1)
{
printf("error!\n");
}
else if(pid2==0)
{
while(1);
}
else
{
pid3=fork();
if(pid3==-1)
{
printf("error!\n");
}
else if(pid3==0)
{
while(1);
}
else
{
while(1);
}
while(1);
while(1);
}
while(1);
}
return 0;
}
运行程序的时候,另开一个终端,使用pstree就可以看到bash下面会打印一个三代的家谱!
首先要创建一个进程作为 爷爷 -> 父亲 -> 儿子
-> 女儿
->叔叔
->姑姑
通过一个三代的家谱来说明fork()函数在创建进程的时候是怎么确定进程关系的。
下面看代码部分:
#include<stdlib.h>
#include<stdio.h>
int main()
{
pid_t pid;
pid=fork();
if(pid==-1)
{
printf("error!\n");
exit(1);
}
else if(pid==0)
{
pid_t pid_1;
pid_1=fork();
printf("this is father!\n");
if(pid_1==-1)
{
printf("error!\n");
}
else if(pid_1==0)
{
printf("this is sunzi\n");
while(1);
}
else
{
printf("this is secend grandfather!\n");
pid_t pid4;
pid4=fork();
if(pid4==-1)
{
printf("error!\n");
}
else if(pid4==0)
{
printf("this is nuncle!\n");
while(1);
}
else
{
while(1);
}
while(1);
}
while(1);
}
else
{
printf("this is unt!\n");
pid_t pid2,pid3;
pid2=fork();
if(pid2==-1)
{
printf("error!\n");
}
else if(pid2==0)
{
while(1);
}
else
{
pid3=fork();
if(pid3==-1)
{
printf("error!\n");
}
else if(pid3==0)
{
while(1);
}
else
{
while(1);
}
while(1);
while(1);
}
while(1);
}
return 0;
}
运行程序的时候,另开一个终端,使用pstree就可以看到bash下面会打印一个三代的家谱!
相关文章推荐
- 深入理解函数内部原理(2)——对一个函数实例进行深入的分析
- Linux进程函数fork(),vfork(),execX()的深入理解
- 进程系统调用——fork函数深入理解
- 深入理解javascript中的立即执行函数(function(){…})()
- PHP面向对象深入理解之五(内省函数与反射类)
- 深入理解函数内部原理(4)——通过new操作符调用构造函数
- 深入理解函数内部原理(5)——闭包
- 深入理解JavaScript系列(4):立即调用的函数表达式
- MySQL中group_concat函数深入理解
- 初识Linux/C语言编程,管道和重定向暨fork与execlp函数的理解
- 深入理解JavaScript系列(15):函数(Functions)
- fork()函数的理解
- 两次fork函数可以防止进程僵死的理解
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- ORACLE时间函数(SYSDATE)深入理解
- strlen和sizeof函数区别(深入理解)
- 深入理解Stata的week()函数
- 深入理解fork()
- 深入理解Oracle索引(18):函数索引的陷阱以及如何避免索引被污染
- 深入理解javascript中的立即执行函数(function(){…})()