在 C 中打印包含进程的矩阵

Printing a matrix containing processes in C

我编写了一个 C 程序,其中一个 5x5 矩阵通过在每个单元格中分叉生成一个进程。问题是,如果我尝试打印 PID,它不会正确打印矩阵。这里的代码:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#define ROW 5
#define COL 5

int main (){

pid_t pid_matrix[ROW][COL];
  
for (size_t row = 0; row < ROW; ++row){
    for (size_t col = 0; col < COL; ++col){
        pid_matrix[row][col] = fork();
        if (pid_matrix[row][col] == -1){
            // Error! 
        }
        else if (pid_matrix[row][col] == 0){
            printf("\t%d", getpid());
            exit(EXIT_SUCCESS);  
        } 
    }
    printf("\n");
}

    return 0;
}

实际上我的代码打印了这个:

    14233
    14234   14235   14236   14237   14238   14239   14240
    14241   14242   14243   14244   14245
    14246   14247   14248   14249   14250
    14251   14252   14253   14254
    14256   14255   14257

我试图在分叉后添加一个sleep,但结果是这样的:

    14158   14159   14162   14163
    14164   14165   14166   14167   14168
    14169   14170   14171   14175   14176
    14177   14178   14179   14180   14181
    14182   14183   14184   14185   14186
    14187

当然,我想要的代码会打印如下内容:

    14158   14159   14162   14163   14164
    14165   14166   14167   14168   14169
    14170   14171   14172   14173   14174
    14175   14176   14177   14178   14179
    14182   14183   14184   14185   14186
    

我做错了什么?我需要在我的代码中更正什么才能正确打印矩阵?

在父进程处理完循环体后加上wait()即可。这将确保子进程在处理矩阵中的另一个条目之前已完成。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>

#define ROW 5
#define COL 5

int main (){

pid_t pid_matrix[ROW][COL];
  
for (size_t row = 0; row < ROW; ++row){
    for (size_t col = 0; col < COL; ++col){
        pid_matrix[row][col] = fork();
        if (pid_matrix[row][col] == -1){
            // Error! 
        }
        else if (pid_matrix[row][col] == 0){
            printf("\t%d", getpid());
            exit(EXIT_SUCCESS);  
        } 
        wait(NULL);
    }
    printf("\n");
}

    return 0;
}