为什么这不会导致叉炸弹

1 recursion fork

这个程序打印2 ^ 3次hi和退出是不是叉调用递归调用main函数?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    fork();
    fork();
    fork();

    puts("hi");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ton 13

它不是递归的,它不会无限期地分叉.这就是为什么它不会炸弹.叉子不会main被调用.fork做的是创建当前进程状态的副本,并从fork调用返回0 到子副本,并将进程id返回到父进程.

通过您的程序,它创建了7个原始副本,总共打了8个电话puts("hi").

original   copy 1    copy 2    copy 3    copy 4    copy 5    copy 6    copy 7 
fork 1 --> created
fork 2 ------------> created
fork 3 ----------------------> created
"hi"                           "hi"
            fork 2 --------------------> created
            fork 3 ------------------------------> created
            "hi"                                   "hi"
                     fork 3 -------------------------------> created
                     "hi"                                    "hi"
                                         fork 3 ----------------------> created
                                         "hi"                           "hi"
Run Code Online (Sandbox Code Playgroud)