Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Как закрыть командную строку после её вызова?

#java #tomcat


Решил написать рестартер Tomcat'a. Но вот проблема, после вызова shutdown.bat и startup.bat
консоли через которые я их вызвал не закрываются   

Runtime.getRuntime().exec("cmd /c start "+tomcatPath+"\\bin\\shutdown.bat");

Runtime.getRuntime().exec("cmd /c start "+tomcatPath+"\\bin\\startup.bat");  


Подскажите пожалуйста, может есть какой-то способ их закрывать, а то вручную это
делать как то не очень.
    


Ответы

Ответ 1



Можно попытаться разобраться, что происходит во время выполнения команды exec("cmd /c start "+tomcatPath+"\\bin\\shutdown.bat"). Запускается первый cmd /c в режиме завершения работы сразу после выполнения переданной ему команды Он запускает в новом окне новый, второй cmd, но в режиме продолжения работы после выполнения команды Последний исполняет shutdown.bat, который вызывает call catalina.bat в этом же интерпретаторе catalina.bat выполняет что-то вроде start java org.apache.catalina.startup.Bootstrap stop, т.е. открывает новое окно, в котором запускается java-приложение. catalina.bat, не ожидая завершения java-приложения, продолжает выполнение. Но других команд нет, поэтому управление возвращается в shutdown.bat shutdown.bat тоже на этом завершается, и управление возвращается во второй cmd, который ожидает от пользователя следующих команд. Вот оно, незакрытое окно. Что тут можно сделать? Например, изменить режим запуска второго командного интерпретатора: "cmd /c start cmd /c "+tomcatPath+"\\bin\\shutdown.bat" В этом случае, завершив обработку shutdown.bat, cmd тоже закроется, и окошко исчезнет. Можно отказаться от вызова первого интерпретатора: Runtime.getRuntime().exec(tomcatPath+"\\bin\\shutdown.bat").waitFor(); Runtime.getRuntime().exec(tomcatPath+"\\bin\\startup.bat").waitFor();

Комментариев нет:

Отправить комментарий