C - 创建子进程

时间:2014-12-14 16:57:26

标签: c

如何从命令行创建多个子进程?

像这样的东西,其中n是从命令行给出的:

for (i = 0; i < n; i++) {
             pids[i] = fork();
}

1 个答案:

答案 0 :(得分:6)

不,这不起作用,因为子进程会创建更多的子进程,这不是你想要的。为了更好地了解这种情况,请查看fork() branches more than expected?。因此,如果当前进程是像这样的孩子,你必须打破循环:

for (i = 0; i < n; i++) {
    if (!(pid[i] = fork()))
        break;
}

为了看到这一点,让我们看一下最低限度的完整示例

file.c:

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

int main(int argc, char *argv[]) {
    int i, n = atoi(argv[1]);
    pid_t *pid = calloc(n, sizeof *pid);
    for (i = 0; i < n; i++)
        if (!(pid[i] = fork()))
            break;

    puts("hello world");

    return 0;
}

然后编译并运行它

$ gcc -o file file.c
$ ./file 3
hello world
hello world
hello world
hello world

请注意,有4条消息,因为有3个孩子加上父进程。