У меня есть следующая проблема:
Я создал сценарий пакетной обработки, который называет себя там (для способности записать журнал параллельно). В сценарии я запускаю другой процесс (как start startServer.bat
) который запускает процесс Java и сохраняет открытым все время.
В моем исходном сценарии я ожидаю 30 секунд, проверяю, работает ли процесс, и сделайте:
exit /B 0
К сожалению, это не работает, окно показывает, что выход/B 0 оценивается, но окно все еще сохраняет открытым. Когда я закрываю окно с другим процессом (значение "дочерних" процессов, запущенных в моем .bat), мой сценарий продолжает свое выполнение.
Так:
scriptA.bat
-> in there I call: start startServer.bat
-> wait 30 seconds
-> check is server is started
-> exit /B 0
Process hangs up!
Что очень нечетно, если я переношу другой сценарий, как:
scriptB.bat
-> call scriptA.bat
-----> in there I call: start startServer.bat
-----> wait 30 seconds
-----> check if server is started
-----> exit /B 0
-> scriptA.bat continues without any hangup!
Я также попробовал то же выходом 0 (без/B) также, тот же результат! В первом случае это зависает во втором случае мои завершения окна как ожидалось...
Кто-либо из Вас когда-либо имел такую проблему прежде и знаешь что случилось здесь? Процесс зависает!
Здесь есть хорошее объяснение всех вариантов выхода из пакетного сценария: http://www.robvanderwoude.com/exit.php
В частности, с этой страницы:
Интерактивная справка DOS (HELP EXIT) не дает понять, что параметр / B выходит из текущего экземпляр сценария, который не обязательно совпадает с выходом из текущего сценария. Т.е. если сценарий находится в ВЫЗВАННОЙ части кода, EXIT / B завершает ВЫЗОВ, а не сценарий.
Таким образом, вы определенно не хотите exit / b 0
в этом случае. Если просто exit 0
не работает, попробуйте GOTO: EOF
.
Думаю, ваша проблема заключается в команде start
. Следующий отрывок из start /?
help может указывать на проблему:
команда / программа
Если это внутренняя команда cmd или командный файл, затем командный процессор запускается с переключателем / K на cmd.exe. Это означает, что окно останется после того, как команда была запущена.
Если это не внутренняя команда cmd или командный файл, тогда это программа и будет работать как оконный приложение или консольное приложение.
В качестве решения вы можете попробовать изменить команду запуска следующим образом:
start "" cmd /c "startServer.bat"