网上看到的一个文章,我自己好好分析了下:#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 }
//如果程序按照注释那样执行,有一个条件,就是子进程创建后是父进程先运行//
//
进程fork分析;l
最新推荐文章于 2024-04-27 06:40:11 发布