一道关于fork的面试题

#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)

猜你喜欢

转载自blog.csdn.net/kwinway/article/details/80535954