for() 在 fork 停止 child 创建后循环

for() loop after fork stops child creation

我的系统上有 fork 问题 使用此程序:

# include <assert.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/stat.h>
# include <sys/types.h>
# include <fcntl.h>
# include <sys/wait.h>
# include <string.h>

int main()
{
    int i;
    for( i=0; i<5;i++)
    {
        fork();
        printf("getpid():%i",getpid());
        for( i=0; i<10;i++)
        {   
            printf("%i\t",i);
        }
    }
    return 0;
}

我希望它分叉几次,并在每个分叉中进行第二个 for 循环 child。但是第一个 "for" 循环似乎在第一个 fork 进程处阻塞。

我只得到这个输出:

getpid():45200  1   2   3   4   5   6   7   8   9getpid():45210 1   2   3   4   5   6   7   8   9

而不是 childrens 如果他们正确执行第二个 "for" 循环通常应该打印的所有其他输出。

程序运行良好。在 2 个循环中使用不同的变量进行迭代。此外,为了便于阅读,稍微编辑了打印语句。

# include <assert.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/stat.h>
# include <sys/types.h>
# include <fcntl.h>
# include <sys/wait.h>
# include <string.h>

int main()
{
    int i;
    for( i=0; i<5;i++)
    {
        fork();
        printf("getpid():%i ",getpid());
        for(int j=0; j<10;j++) //Use variable j instead of i.
        {
            printf("%i\t",j);
        }
        printf("\n");
    }
    return 0;
}