如何运行child同时处理?在 c

How to run child processes simultaneously? in c

所以这是我的代码,它将一个 int 作为命令行参数,然后 fork N child 个进程(同时 运行)。然后当每个 child 结束时,parent 将回显 child 即 child 退出状态。

但现在我只能 child child 但不能同时进行。我该怎么做?

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>

int main ( int argc, char *argv[] )
{
    int i, pid, ran;

    for(i = 0; i < atoi(argv[1]); i++) {
    pid = fork();
    srand(time(NULL));
    ran = (rand() % 10) + 1 ;

     if (pid < 0) {
        printf("Error");
        exit(1);
     } else if (pid == 0) {
        printf("Child (%d): %d\n", i + 1, getpid());
        printf("Sleep for = %d\n", ran);
        sleep(ran);
        exit(ran); 
     } else  {
        int status = 0;
        pid_t childpid = wait(&status);
        printf("Parent knows child %d is finished. \n", (int)childpid);
     }
  }

}

您在生成子项的循环内调用 wait(),因此在当前子项完成之前,它不会继续循环以启动下一个子项。

您需要在单独的循环中在循环外调用 wait()

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>

int main ( int argc, char *argv[] )
{
    int i, pid, ran;

    for(i = 0; i < atoi(argv[1]); i++) {
        pid = fork();
        srand(time(NULL));
        ran = (rand() % 10) + 1 ;

         if (pid < 0) {
            printf("Error");
            exit(1);
         } else if (pid == 0) {
            printf("Child (%d): %d\n", i + 1, getpid());
            printf("Sleep for = %d\n", ran);
            sleep(ran);
            exit(ran); 
         }
    }

    for(i = 0; i < atoi(argv[1]); i++) {
        int status = 0;
        pid_t childpid = wait(&status);
        printf("Parent knows child %d is finished. \n", (int)childpid);
    }
}