Пример нескольких вилок в C - PullRequest
0 голосов
/ 02 октября 2011

Я пытаюсь использовать программу, которая использует несколько вилок.
Я использовал этот пример, чтобы начать работу Multiple fork () Concurrency

, она работает отлично, как есть.Тем не менее, когда я пытаюсь добавить оператор вывода в дочерний процесс, как это:

 if ((p = fork()) == 0) {
          // Child process: do your work here
        printf("child %i\n", ii);
          exit(0);
       }

Процесс никогда не заканчивается.Как я могу что-то сделать с ребенком и заставить родителя завершить выполнение программы?

1 Ответ

3 голосов
/ 02 октября 2011

В вашем примере код

if (waitpid(childPids[ii], NULL, WNOHANG) == 0) {

должно быть

if (waitpid(childPids[ii], NULL, WNOHANG) == childPids[ii]) {

из-за

waitpid (): в случае успеха возвращает идентификатор процесса ребенка, состояние которого изменилось; в случае ошибки возвращается -1; если указан WNOHANG и ни один дочерний элемент (ren), указанный в pid, еще не изменил состояние, возвращается 0.

Ссылка: http://linux.die.net/man/2/waitpid

...