#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);
}
使用gcc编译,
问题1 此程序运行期间最多有几个进程?
4个进程, 这在我的一篇博客有讲
fork遇上for循环
问题2
已知其中一个进程 打印结果是
pid1:1002,pid2:1003
求其他进程打印的结果(不考虑执行顺序,进程id顺序连续分配)
首先fork的返回值,父进程返回子进程pid,子进程返回0;
由于该进程返回的两个结果都非0,所以可以肯定它是运行的老大进程,
它创建的两个子进程分贝是 1002,1003;
那么 1002 打印的结果呢? 他是老大的父进程,所以pid1返回0,同时它又创建了一个新的进程,
那么pid2应该返回其子id,由题意的子进程的ID号是1004
1002 进程打印结果就是
(0,1004)
再考虑 1004 的打印结果,由于它父进程是1002,所以pid1可以由1002继承过来,
所以 1003的打印结果是
(0,0)
最后1003的打印结果, 它是老大第二次fork的产物,所以pid1得通过老大进程获得,
老大的pid1是 1002,同时它又是老大的子进程所以1003的返回结果是
(1001,0)