Как именно Windows убивает процесс?


10

Я не знаю, как процессы убиты в Windows. В Linux «горячее» уничтожение посылает сигнал (15), который процесс может обработать, создав экземпляр обработчика сигнала. Холодное уничтожение - это сигнал (9), который ОС обрабатывает путем принудительного завершения процесса.

Как я могу «убить» процесс в Windows? Как это обрабатывается ОС и процессом? Какие действия выполняет ОС? Существует ли кроссплатформенный способ ответа на запрос на удаление / закрытие?


1
Для читателей: сигнал 15 есть SIGTERM, 9 есть SIGKILL.
user1686

Пожалуйста, примите ответ, если на ваш вопрос ответили.
Оливер

Ответы:


11

«End Task» (и taskkill) появляется, чтобы отправить WM_CLOSEсообщение в окна программы. (То же самое происходит, когда вы нажимаете кнопку ׫Закрыть».) Если программа не завершает работу через некоторое время, пользователю предлагается принудительно завершить программу.

«Убей процесс» и taskkill /fиспользуй TerminateProcess().


1
+1, WM_CLOSE отправлено в приложение; после того, как X раз попросит пользователя принудительно уничтожить, Windows удаляет процесс из планировщика, закрывает все дескрипторы (что может отключить процесс, если ядро ​​обрабатывает один из этих дескрипторов), затем освобождает пространство памяти (это действительно короткая версия процесса).
Крис С

Третий способ ntsd -p <pid> -c q, который использует ntsdотладчик; Я не уверен, что происходит, когда программа убивается таким образом. ( тыкает @Chris )
user1686

5
что произойдет, если в программе нет окна?
ИтайД

1
@IttayD: Тогда в Диспетчере задач нет записи для использования «Завершить задачу» :) Я только что попробовал, taskkillи он отвечает: «Этот процесс может быть принудительно завершен (с параметром / F)». Так что да, остается только один выбор TerminateProcess().
user1686

1
@IttayD: обратите внимание, что в Windows сервисы (демоны) пишутся не так, как пользовательские приложения; они могут получать запросы состояния и управлять запросами от Service Manager, поэтому возможна постепенная остановка.
user1686

0

Sysinternals (теперь часть Microsoft) предлагает утилиту под названием pskill, которую можно использовать из командной строки для уничтожения процессов в локальной системе или в удаленных системах.

Обычный способ убить процессы в Windows в среде с графическим интерфейсом - это использовать диспетчер задач.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.