Запустите дочерние процессы из службы Windows

У меня есть служба Windows XMLRPC в C ++. Мне нужно, чтобы дочерние процессы запускались из него, если служба Windows получила запрос и процесс уже существует, мне нужно завершить этот конкретный дочерний процесс и запустить его снова. Мне не нужно ждать завершения процесса после запуска, но как только он запустится и запустит то, что он должен делать, мне нужно уведомить основной процесс. Когда дочерний процесс завершается, он должен уведомить службу, которая запустила его, чтобы я мог вести список того, какие процессы уже существуют. Я знаю, что могу сделать это с CreateProcess но как мне обращаться с аспектами уведомления, когда конкретная вещь достигнута в дочернем процессе.

1

Решение

После звонка CreateProcess, отслеживать процесс обработки. Вы можете использовать это, чтобы увидеть, если процесс имеет выход или нет, и позвонить TerminateProcess если необходимо.

Вы можете даже сохранить все дескрипторы в массиве, а затем один вызов WaitForMultipleObjects сообщит вам, как только завершится какой-либо из дочерних процессов.

5

Другие решения

Если дочерние процессы должны уведомить основной процесс о чем-то, вы можете использовать один из механизмы межпроцессного взаимодействия. Конечно, это предполагает, что вы пишете код для дочерних процессов. Если все, что вам нужно знать, это когда начинается и заканчивается дочерний процесс, то, как указано в предыдущем ответе, вы можете использовать CreateProcess и один из функции ожидания. Вы можете остановить дочерний процесс с TerminateProcess но это не изящный способ остановить процесс (вы можете остановить его в середине чего-то важного), более мягкий способ остановить дочерний процесс — уведомить дочерний процесс о том, что вы хотите, чтобы он остановился (используя межпроцессное взаимодействие). механизм), а затем ждет его, чтобы остановить себя. О, я забыл объяснить, что вы можете дождаться завершения процесса, передав дескриптор процесса одной из функций ожидания.

2