如何从命令行创建多个子进程?
像这样的东西,其中n是从命令行给出的:
for (i = 0; i < n; i++) {
pids[i] = fork();
}
答案 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个孩子加上父进程。