12

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

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

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

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

3 ответа3

14

Taskkill.exe

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

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

taskkill /pid 1234

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

taskkill /im notepad.exe

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

taskkill /?

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

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

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

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

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

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

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

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

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

4

Вы можете использовать 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 затем пробел, затем номер процесса ID процесса.

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

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

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

0

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

http://gnuwin32.sourceforge.net/

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

λ kill -l                                                                                                                                                                                                                                                                
INT                                                                                                                                                                                                                                                                      
ILL                                                                                                                                                                                                                                                                      
FPE                                                                                                                                                                                                                                                                      
KILL                                                                                                                                                                                                                                                                     
SEGV                                                                                                                                                                                                                                                                     
TERM                                                                                                                                                                                                                                                                     
CHLD                                                                                                                                                                                                                                                                     
ABRT             

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .