Як саме Windows вбиває процес?


10

Мені невідомо, як вбиваються процеси в Windows. В Linux "тепле" вбивство надсилає сигнал (15), з яким процес може впоратися, ініціюючи обробник сигналу. Холодне вбивство - це сигнал (9), який ОС обробляє, вбиваючи процес насильно.

Як я можу "вбити" процес у Windows? Як це обробляється ОС та процесом? Які дії виконує ОС? Чи існує міжплатформний спосіб реагування на запит на вбивство / закриття?


1
Для читачів: Сигнал 15 є SIGTERM, 9 є SIGKILL.
користувач1686

Будь ласка, прийміть відповідь, якщо на ваше запитання відповіли.
Олівер

Відповіді:


11

taskkillЗ'являється "Закінчити завдання" (і ), щоб розмістити WM_CLOSEповідомлення у вікнах програми. (Те ж саме робиться при натисканні кнопки ׫Закрити».) Якщо програма не виходить через деякий час, користувачеві буде запропоновано завершити програму насильно.

"Вбити процес" і taskkill /fвикористовувати TerminateProcess().


1
+1, WM_CLOSE, надісланий додатку; Після того, як X час попросить користувача змусити вбити, Windows видаляє процес із планувальника, закриває всі ручки (що може збільшити процес, якщо ядро ​​обробляє одну з цих ручок), а потім повертає простір пам'яті (це дійсно коротка версія процесу).
Chris S

Третій спосіб - ntsd -p <pid> -c qце використання ntsdналагоджувача; Я не впевнений, що станеться, коли програма вбита таким чином. ( pokes @Chris )
користувач1686

5
що станеться, якщо програма не має вікна?
IttayD

1
@IttayD: Тоді немає запису в диспетчері завдань для використання "Кінцевої задачі" на :) Я просто спробував, taskkillі він відповідає: "Цей процес може бути припинений лише примусово (з опцією / F)." Тож так, залишився єдиний вибір TerminateProcess().
користувач1686

1
@IttayD: Зауважте, що в Windows служби (демони) записуються інакше, ніж користувацькі програми; вони можуть отримувати запити статусу та запити на контроль від диспетчера послуг, тому можлива витончена зупинка.
користувач1686

0

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

Звичайний спосіб вбити процеси в Windows в середовищі GUI - це використання диспетчера завдань.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.