Как запросить дочерние процессы в C ++ - PullRequest
0 голосов
/ 26 апреля 2011

Моя программа на С ++ порождает несколько дочерних процессов, используя fork () и execv (). Как я могу запросить эти процессы? Если бы я хотел закрыть один, как бы я это сделал?

Ответы [ 3 ]

5 голосов
/ 26 апреля 2011

Когда вы fork, возвращаемое значение равно 0 в дочернем процессе, а идентификатор дочернего процесса (pid) в родительском процессе.

Затем вы можете вызвать kill с этим pid, чтобы увидетьесли он все еще работает, или запросите завершение работы.Чтобы проверить, запущен ли процесс, используйте 0 в качестве сигнала, а затем проверьте возвращаемое значение (0 == выполняется; -1 == не выполняется).Чтобы запросить отключение, используйте SIGTERM в качестве сигнала.

1 голос
/ 26 апреля 2011

Вероятно, лучший из известных мне способов взаимодействия между процессами после fork() - через сокеты (см. socketpair () ).

Оттуда вы, вероятно, можете заставить все работать, просто определив протокол для связи (включая запрос на завершение).

0 голосов
/ 26 апреля 2011

После вызова fork() вы можете использовать либо wait(&status_int), либо waitpid(child_pid, &status_int, WNOHANG), чтобы определить статус возврата детей, используя последний, если вы не хотите блокировать ожидание ребенка. Переданный аргумент &status_int будет указателем на int, который будет содержать состояние возврата дочернего процесса после его завершения. Если вы хотите дождаться завершения какого-либо разветвленного процесса и не заботитесь о возвращаемом значении, вы можете просто позвонить по номеру wait(NULL) или для неблокирующей версии waitpid(-1, NULL, WNOHANG).

...