C – значение wait (NULL) при выполнении fork () параллельно

В приведенном ниже коде вилки фактически работают параллельно или один за другим?

В чем смысл wait(NULL) ?

(Программа создает n число дочерних процессов, n передается через командную строку)

 int main ( int argc, char *argv[] ) { int i, pid; for(i = 0; i < atoi(argv[1]); i++) { pid = fork(); if(pid < 0) { printf("Error occured"); exit(1); } else if (pid == 0) { printf("Child (%d): %d\n", i + 1, getpid()); exit(0); } else { wait(NULL); } } } 

Они работают параллельно, вплоть до того момента, когда один из них ждет.

wait(NULL) или более точно wait(0) означает ждать до изменения состояния в дочернем процессе. Чтобы узнать о вызовах Unix / Linux C api, введите man в командной строке. Вам нужно будет привыкнуть к чтению этих страниц, поэтому лучше начать сейчас.

В твоем случае

 man wait 

дал бы вам то, что вам нужно.

Поскольку у вас есть только fork(...) ed один раз, у вас есть только один ребенок. Родитель ждет, пока он не изменит состояние, и поскольку состояние дочернего элемента во время вилки совпадает с состоянием родителя перед развилкой ( побегом ), вероятным результатом является то, что родитель ждет, пока ребенок не умрет. Затем родитель продолжит выполнение, но поскольку после wait(...) он не сможет многое сделать, он также быстро выйдет.