Как запрашивать дочерние процессы в C++

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


person node ninja    schedule 26.04.2011    source источник


Ответы (3)


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

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

person Chris Jester-Young    schedule 26.04.2011

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

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

person riwalk    schedule 26.04.2011

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

person Jason    schedule 26.04.2011