关于连续使用fork()到底产生多少个子进程问题的实践
原问题来自网上的提问,近来也有不少相关的IT公司笔试题要求在使用fork()多次的情况下写出输出某个字符串的次数。针对这个问题,不少网友有不同的看法。我对于这个问题的探究主要放在fork()到底产生多少个子进程这个问题上。
实验环境:64-Ubuntu/Linuxversion 3.13.0-37-generic/gcc version 4.8.2
以下代码用于在连续fork()两次的程序中跟踪当前进程ID(getpid())、当前进程的父进程ID(getppid())、当前进程中的变量child_process1与child_process2。
从运行结果来看,主父进程ID为3519、第一个子进程ID为3520、第二个子进程ID为3521,还有一个进程ID为3522的进程居然还输出了两行结果。
从运行过程来看主父进程(3519)从头执行到尾,在“almostend”的时候进入等待(等待两个子进程结束)。接着是主父进程的第二个子进程(3521)开始执行(为什么不是第一个子进程先执行到输出语句,这个跟进程调度有关),然后第二个子进程一直执行到“end”结束。再下来就是第一个子进程(3520)执行,执行到“almost end”的时候停住了,蹦出来一个子进程(3522)执行了两次输出,接着这个进程结束。再下来就是第一个子进程跟主父进程依次结束。