В Windows, как я могу изящно попросить работающую программу завершить работу?

17

В Unix или Linux легко изящно попросить завершить работающее приложение: вы посылаете ему сигнал SIGTERM. Если его идентификатор процесса 1234, вы можете просто запустить kill 1234или kill -s TERM 1234или kill -15 1234.

Как я могу сделать то же самое в Windows?

Если я правильно помню, функция «Завершить задачу» в диспетчере задач (а не функция «Завершить процесс») использовалась для выполнения того, что я хочу. Но, начиная с Windows 8.1, это уже не так нежно; когда я использую эту функцию, это приводит к потере несохраненных данных.

Я не хочу писать код для этого. Если бы я это сделал, я бы спросил о переполнении стека. :)

unforgettableidSupportsMonica
источник
2
Если вы разработчик программного обеспечения и хотите сделать это программно, см. Связанный с этим вопрос переполнения стека о том, как изящно попросить процесс завершиться .
незабываемыйПоддержкаMonica
4
В Windows нет ничего грациозного ........
Моав

Ответы:

17

Taskkill.exe

Энди Э пишет, что вы можете использовать taskkill.exe.

Чтобы завершить процесс с идентификатором процесса 1234:

taskkill /pid 1234

Чтобы прекратить notepad.exe:

taskkill /im notepad.exe

Для получения дополнительной помощи:

taskkill /?

Он добавляет:

/fВыключатель заставит убить, но не использовать его просто посылает сигнал завершения , чтобы приложение закрывается корректно.

Он прав. Я попытался использовать taskkill.exe (без /f), чтобы прекратить Notepad, и он работал как ожидалось. Блокнот спросил меня, хочу ли я сохранить несохраненный текст, который я ввел.

Я использую домашнюю версию Windows 8.1. Похоже, taskkill.exeпришел в комплекте с Windows без дополнительной оплаты. Это в c:\windows\system32.

Или просто выйти

Если вы не хотите беспокоиться об этом, просто выйдите из своей учетной записи Windows, затем войдите снова.

Консольные приложения

Что касается консольных приложений (например, PowerShell), Крис Бекке добавляет :

Нет реального способа изящно закрыть консольные приложения в Windows. Им нужно поддерживать какой-то изящный закрытый механизм.

незабываемых
источник
Обратите внимание, что это точно не повторяет то, что происходит при выходе из системы или завершении работы; для этого, см. stackoverflow.com/questions/520910/…
Мэтт МакГенри
5

Вы можете использовать rmlogotest.exe(инструмент тестирования логотипа Restart Manager). Эта бесплатная утилита, написанная Microsoft, является частью Windows App Certification Kit.

Чтобы получить последнюю версию Windows App Certification Kit, загрузите и запустите установщик Windows SDK. (Вы можете найти последнюю версию установщика Windows SDK, выполнив поиск в Google.) Снимите все флажки, кроме поля Windows App Certification Kit. Подождите, пока комплект будет загружен и установлен. Если я правильно помню, комплект составляет пару сотен мегабайт.

rmlogotest.exeвероятно будет, C:\Program Files (x86)\Windows Kits\10\App Certification Kitесли вы используете версию 10 Windows SDK.

Откройте командную строку. Перейдите в правильный каталог. rmlogotestЗатем введите пробел, а затем идентификационный номер процесса.

Если процесс «Перезапустить менеджер в курсе», rmlogotestон корректно перезапустит его и сообщит вам «Проверка логотипа пройдена». В противном случае rmlogotestпопросит его завершить корректно, а затем может сообщить вам «Ошибка проверки логотипа».

Я попытался использовать rmlogotest.exeдля завершения Notepad, и он работал как ожидалось. Блокнот спросил меня, хочу ли я сохранить несохраненный текст, который я ввел.

(Если вам интересно, что такое Restart Manager, и позвольте мне объяснить. Restart Manager является частью Windows и используется установщиком Windows 4.0 и выше. Когда установщику Windows требуется перезаписать или удалить открытый файл, он использует пошаговый процесс. Он сообщает Restart Manager о необходимости корректно завершить процесс, использующий файл. Он перезаписывает файл. Затем он сообщает Restart Manager о необходимости запустить процесс снова.)

unforgettableidSupportsMonica
источник
0

GnuWIN32 имеет порты Windows с общими утилитами Linux, включая kill.exe

http://gnuwin32.sourceforge.net/

Поддерживаются следующие сигналы по имени или номеру

λ kill -l                                                                                                                                                                                                                                                                
INT                                                                                                                                                                                                                                                                      
ILL                                                                                                                                                                                                                                                                      
FPE                                                                                                                                                                                                                                                                      
KILL                                                                                                                                                                                                                                                                     
SEGV                                                                                                                                                                                                                                                                     
TERM                                                                                                                                                                                                                                                                     
CHLD                                                                                                                                                                                                                                                                     
ABRT             
teknopaul
источник