Моя программа на С++ порождает несколько дочерних процессов, используя fork() и execv(). Как я могу запросить эти процессы? Если бы я хотел закрыть один из них, как бы я это сделал?
Как запрашивать дочерние процессы в C++
Ответы (3)
Когда вы fork
, возвращаемое значение равно 0 в дочернем процессе и идентификатор дочернего процесса (pid) в родительском процессе.
Затем вы можете вызвать kill
с этим pid, чтобы узнать, работает ли он, или запросить завершение работы. Чтобы проверить, запущен ли процесс, используйте 0 в качестве сигнала, затем проверьте возвращаемое значение (0 == выполняется; -1 == не выполняется). Чтобы запросить отключение, используйте SIGTERM
в качестве сигнала.
Вероятно, лучший известный мне способ связи между процессами после fork()
— это через сокеты (см. пара сокетов()).
Оттуда вы, вероятно, можете заставить что-либо работать, просто определив протокол для связи (включая запрос на завершение).
После вызова fork()
вы можете использовать wait(&status_int)
или waitpid(child_pid, &status_int, WNOHANG)
для определения статуса возврата дочерних элементов, используя последний, если вы не хотите блокировать ожидание дочернего элемента. Переданный аргумент &status_int
будет указателем на int
, который будет содержать статус возврата дочернего процесса после его выхода. Если вы хотите дождаться завершения любого разветвленного процесса и не заботитесь о возвращаемом значении, вы можете просто вызвать wait(NULL)
или, для неблокирующей версии, waitpid(-1, NULL, WNOHANG)
.