Несмотря на то, что пакетный файл может быть прерван, консоль (окно), в которой запущен пакетный файл, может быть оставлена открытой, в зависимости от операционной системы, командного процессора и способа запуска выполнения пакетного файла (из командной строки). или через ярлык).
taskkill
- хорошая команда для завершения программы, распространяемой с Windows (я предполагаю, что вы хотите остановить РАЗНУЮ программу, а не сам пакетный файл).
Можно завершать программы по идентификатору процесса, имени исполняемого файла, заголовку окна, состоянию (т.е. не отвечает), имени DLL или имени службы.
Вот несколько примеров, основанных на том, как вы можете использовать это в своем пакетном файле:
Принудительно завершить «program.exe» (часто требуется флаг / f «force», чтобы принудительно остановить программу, просто проверьте, нужен ли он для вашего приложения методом проб и ошибок):
taskkill /f /im program.exe
Остановите все неотвечающие программы:
taskkill /fi "Status eq NOT RESPONDING"
Остановить программу на основе заголовка окна (здесь допускается подстановочный знак *, чтобы соответствовать чему угодно):
taskkill /fi "WindowTitle eq Please Login"
taskkill /fi "WindowTitle eq Microsoft*"
Вы даже можете использовать его для остановки программы на другом компьютере в вашей сети (хотя запись пароля учетной записи в пакетном файле просто не очень хорошая идея).
taskkill /s JimsPC /u Jim /p James_007 /im firefox.exe
Еще одна альтернатива, также распространяемая с Windows, - tskill
. Хотя у него не так много опций, команды немного проще.
EDIT:
Я не уверен, что есть. Я бы подумал, что закрытие окна cmd похоже на force-closing
приложение, то есть немедленное завершение без дальнейшего уведомления. Это имеет поведение многих приложений, которые, когда их просят force-close
, на самом деле, они требуют много времени для окончательного завершения. Это связано с тем, что в попытках ОС освободить все ресурсы некоторые ресурсы (особенно определенные ресурсы ввода-вывода и / или файлов) не освобождаются немедленно.
ИМО, Java ничего не может с этим поделать, если захочет. Принудительное закрытие происходит на уровне операционной системы, после чего он освобождает память, файл и дескрипторы ввода-вывода, которые используются, и т. Д. Java не (и не любая другая программа) не контролирует принудительное закрытие. На данный момент ОС берет на себя ответственность.
Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь.