Как создать несколько дочерних процессов из командной строки?C - Создание дочерних процессов
Что-то вроде этого, где п задается из командной строки:
for (i = 0; i < n; i++) {
pids[i] = fork();
}
Как создать несколько дочерних процессов из командной строки?C - Создание дочерних процессов
Что-то вроде этого, где п задается из командной строки:
for (i = 0; i < n; i++) {
pids[i] = fork();
}
Нет, это не будет работать, потому что тогда дочерние процессы будут создавать больше детей, и это не будет то, что вы хотели. Чтобы лучше понять, как это происходит, взгляните на 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 ребенка плюс родительский процесс.
Вопрос состоял в том, как я могу выполнить этот код из командной строки, указав 'n' – Angelo
@Angelo Ah, поэтому вы заинтересованы главным образом в том, как использовать терминал для его запуска. Я был смущен вашими тегами. В этом случае я отредактирую пример того, как это сделать. – randomusername
Спасибо. А также, почему это создало бы больше детей с моим кодом? создает ли n дочерних элементов? Я не понимаю. – Angelo
C не знает о процессах. 'fork' не стандартизирован в C99 или C11, а в POSIX. Вероятно, вам не хватает Linux или POSIX-тега. –
. Посмотрите man-страницу функций, которые вы используете (http://linux.die.net/man/3/fork). Особенно разделы _Description_ и _Return Value_ содержат ценную информацию часто. Особенно, когда вы не знаете, что делает функция. – moooeeeep
Цикл for должен быть написан так, что только один из родителей выполняет fork(), иначе ребенок выполняет тот же цикл, поэтому (более или менее) бесконечное число детей и детей детей и детей детей детей ... процессы генерироваться. Посмотрите код возврата fork(), чтобы избежать того, чтобы дети также использовали fork() собственных детей. – user3629249