含fork调用的C程序进程创建数量求解及逻辑分析
求解C程序中fork创建的进程总数
我需要计算下面这段C程序会创建多少个进程:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(void){ int pid = (int)fork(); pid = fork(); pid = fork(); printf("%d\n", pid); if (pid == 0){ fork(); } fork(); return 0; }
一开始我以为程序里有5次fork调用,直接用公式2^5 - 1算出会创建31个进程,但很快发现因为if (pid == 0)分支的存在,这个结论不对。
为了统计进程数,我修改了代码:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int count = 1; int main(void){ int pid = (int)fork(); pid = fork(); pid = fork(); if (pid == 0){ printf("2 "); fork(); } fork(); printf("1 "); return 0; }
运行结果是:1 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 2 1 1 2 1 2 1 2 1,里面包含24个'1'和8个'2'。
我据此推测创建了23个进程(其中8个由if分支的fork创建),但无法解释该结果,也不确定是否需要减去初始进程数,恳请技术指导。
内容的提问来源于stack exchange,提问作者Nomad
相关产品推荐
相关产品推荐

