РЕДАКТИРОВАТЬ: Кажется, я пропустил суть этого вопроса.Несмотря на это, я думаю, я все равно оставлю это здесь для других людей, чтобы найти.Не стесняйтесь, однако, понизить.
Вот другие предложения по ожиданию завершения подчиненных процессов.
Ваш основной процесс должен периодически проверять, выполнены ли все подчиненные процессы.Существует множество способов сделать это.Я назову несколько:
Перед этим, пожалуйста, вставьте задержку между проверками, чтобы не использовать весь ЦП в узком цикле, как это:
timeout /t 1 /nobreak
Маркерные файлы
Заставить подчиненные процессы создать или удалить файл, когда они собираются завершить
Вы можете создавать файлы следующим образом:
echo ANYTHING>FILENAME
Главный сценарий должен периодически проверять, существуют ли эти файлы следующим образом:
if exist FILENAME goto IT_EXISTS
Когда все / ни один из файлов не существует, ваша задача выполнена.
Чтобы предотвратить беспорядок, создайте файлы в папке %random%
внутри каталога %temp%
и передайте его имя подчиненнымс помощью аргументов %1
, %2
...
Проверьте наличие процесса по заголовку окна
Запустите tasklist
и проанализируйте его выходные данные, чтобы определить, все ли выполняются подчиненные программы.
Вероятно, самый простой способ - использовать имя окна, чтобы отфильтровать "ваши" процессы.
Запустите их так:
start "WINDOW_TITLE" "BATCH_FILE" ARGUMENTS
, затем найдите их так:
TASKLIST /fi "Windowtitle eq WINDOW_TITLE" | find ".exe"
if "%errorlevel%" == "0" goto PROCESS_EXISTS
если ничего не найдено, ваша задача оконченад.
Дополнительную информацию можно найти по адресу: A , B , C
Проверка наличия процесса с помощью PID
Вместо заголовка окна вы можете использовать PID процессов.
Чтобы получить его, запустите ваш процесс с WMIC
, как описано здесь
Внешние программы
Вы можете загрузить или написать внешнюю программу для облегчения межпроцессного взаимодействия.Примеры включают:
- TCP-сервер и клиенты с
netcat
- Используйте
mkfifo
из GnuWin32 coreutils, чтобы создать именованный канал и использовать его - Семафоры Windows исобытия через пользовательскую программу C / C # / AutoIT
- Утилиты, такие как
NirCmd
и PsExec
, могут упростить процедуру проверки PID
.... и более
Если ни одно из решений не работает для вас, отредактируйте вопрос, чтобы сузить свой запрос.