网上看到的一个文章,我自己好好分析了下:
#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
- }
//如果程序按照注释那样执行,有一个条件,就是子进程创建后是父进程先运行
引用:http://blog.csdn.net/yuwenliang/article/details/5209239