Дійсно вбивство процесу в Windows


375

Інколи програма на машині Windows божеволіє і просто зависає. Тому я зателефоную до менеджера завдань і натисніть на нього кнопку "Завершити процес". Однак це не завжди працює; якщо я спробую це достатньо разів, то він, як правило, вмирає, але я дуже хотів би негайно його вбити. У Linux я міг просто kill -9гарантувати, що процес загине.

Це також може бути використане для написання пакетних сценаріїв і написання пакетних сценаріїв програмування.

Чи є якась програма чи команда, яка постачається разом із Windows, яка завжди вбиває процес? Безкоштовне стороннє додаток було б чудово, хоча я вважаю за краще би це зробити на машинах, за якими сідаю вперше.


19
Бродячі процеси - досить поширена проблема в програмуванні, з якою я не повинен погоджуватися; це не тематичне питання.
Dan Molding

19
Я щодня займаюся управлінням процесами як розробник. Це абсолютно тема для мене!
Джон Фіцпатрік

14
Я настійно не рекомендую видаляти це питання. +195, і це справді ранній хіт Google для пов'язаного питання.
Джошуа

2
"якщо тільки вони безпосередньо не включають інструменти, які використовуються в основному для програмування", я зіткнувся з цим питанням щодо Visual Studio, що підтримує запущений процес, завдяки якому я не зміг його вбити. Закриття Visual Studio допомогло вбити проблемний процес.
Йоаким

Ви можете використовувати командлет "Stop-Process" .
Росберг Лінхарес

Відповіді:


318

"Завершити процес" на викликах "Процеси" TerminateProcess- це найвищий спосіб, яким Windows знає, щоб вбити процес.

Якщо він не піде, він наразі заблокований в очікуванні на якийсь ресурс ядра (можливо, драйвер помилок), і нічого (крім перезавантаження) ви не могли б зробити, щоб процес відійшов.

Перегляньте цей запис із блогу зворотного шляху, коли: http://blogs.technet.com/markrussinovich/archive/2005/08/17/unkillable-process.aspx

Системи на базі Unix, як-от Linux, також мають таку проблему, коли процеси могли б пережити a, kill -9якщо вони знаходяться як "Безперебійний сон" (показано зверху та ps як стан D), і тоді процеси сплять так добре, що вони не можуть обробляти вхідні сигнали (що і killробить - передача сигналів).

Як правило, режим безперебійного сну не повинен тривати довго, але, як під Windows, зламані драйвери або непрацюючі програми користувальницького простору ( vforkбез exec) можуть Dназавжди спати .


29
Хоча я ненавиджу, що це правильна відповідь, я не сумніваюся, що це правильніше, ніж завдання внизу .... дурні драйвери баггі!
codetaku

6
Трохи менше дратує, ніж перезавантаження - це знову вийти / увімкнутись. Все-таки втратите роботу, але, можливо, не так вже й багато часу.
перекрут

8
це викликано деяким іншим процесом, який гарантує, що початковий процес завжди працює. Ви вбили свій старий екземпляр, і сторожовий
собака

8
Ця відповідь зовсім не правильна. "Закінчити процес" - не самий кінцевий спосіб вбити процеси, оскільки він не може вбити службові процеси (наприклад). taskkill /fє найбільш кінцевим.
користувач626528

5
TaskKill / f викликає лише TerminateProcessAPI. Це робить точно так само, як і диспетчер завдань (правда, ви праві на це, з підвищеними привілеями).
pilif

233
taskkill /im myprocess.exe /f

"/ F" - це "сила". Якщо ви знаєте PID, то ви можете вказати це, як у:

taskkill /pid 1234 /f

Можливі багато інших варіантів, просто введіть taskkill /? для всіх. Параметр "/ t" вбиває процес і будь-які дочірні процеси; що може бути для вас корисним.


10
Просто записка. Це особливо корисно, якщо ви пишете сценарії для управління сервером. kill.exe (з комплекту NT Res) призведе до виходу програми, але якщо у вас встановлений обробник збоїв (особливо windbg), це може спричинити проблеми, оскільки ОС буде бачити вбитий процес таким, що зазнав аварії, і спробу налагодити. це. Завдання завдання не призведе до цього питання.
Аарон

6
@lzprgmr - taskkill та "end task", ймовірно, обидва називають одну і ту ж основну функцію Windows "TerminateProcess" msdn.microsoft.com/en-us/library/windows/desktop/…
JosephStyons

60
Це не є більш ефективним, ніж «закінчити процес» у менеджера завдань.
Едді

2
Я намагався насильно вбити SugarSync.exe без перезавантаження (оскільки перезапуск SugarSync двічі до того, як він дійсно запускає, знов працює), але taskkill / T / F / IM SugarSync.exe не працює - хоча він стверджує, що "УСПІХ"
Джон Кумбс

2
ДЯКУЮ ТОБІ! taskkill /pid 1234 /fпрацює, коли End Task відмовляється працювати! ОЦЕ ТАК!
Хенді Іраван

37

Хакер процесу має численні способи вбивства процесу.

(Клацніть правою кнопкою миші процес, потім перейдіть до пункту Різне-> Термінатор.)


5
Неможливо знайти багато на шляху підтвердження, оскільки пошук цього лише дає мільйони БЕЗКОШТОВНОГО ЗАВАНТАЖЕННЯ !!! посилання. Але це робить те, що, на його думку, робить, ризикує вірус і все.
bwerks

2
@Nuzzolilo: Звичайно! Клацніть процес правою кнопкою миші, перейдіть до пункту Різне-> Термінатор.
користувач541686

6
Працює не на всіх процесах, у мене був такий, який пережив усі варіанти.
Zitrax

7
Це блискуче створило мій комп'ютер. Процес пішов після перезавантаження. Гарна робота ... -.- '
Педро Олівейра

5
На жаль, Термінатор видалено в версії 2.3.2 :(
raymai97

23

JosepStyons правий. Відкрийте cmd.exe і запустіть

taskkill /im processname.exe /f

Якщо є повідомлення про помилку,

ПОМИЛКА. Процес "process.exe" з PID 1234 не вдалося закінчити. Причина: у доступі заборонено.

потім спробуйте запустити cmd.exe як адміністратор.


9
Працюючи адміністратором, помилка змінюється. Тепер він говорить: ERROR: The process with PID 17888 (child process of PID 17880) could not be terminated. Reason: There is no instance of the task.і він посилається на батьківський PID 17880. Оскільки він не може знайти батька, він не вб'є дитину-сироту. :(
Джессі Чизгольм

1
"Ви також повинні вбити дочірній процес, якщо хтось породив, щоб успішно вбити ваш процес", спробуйте цей stackoverflow.com/questions/12528963/…
Dhruv Chandhok

У моєму випадку процес зомбі, який я сказав йому вбити, була єдиною дитиною, і батька не було, хоча зомбі все ще вважало, що має батьків. У моєму випадку це вирішено за допомогою шляху Windows 8.1 Advanced Advanced System System, але відмовившись від фактичного витирання будь-якого диска та просто повного примусового перезавантаження. Регулярне відключення та перезавантаження - це дійсно сон / сплячка (щоб заощадити час при запуску). Нетривіальне отримання його для повного відключення.
Джессі Чизгольм

"Відмовлено у доступі" означає, що процес вже закритий. Наприклад, якщо ви щойно намагалися закрити його. Вам потрібно буде почекати, поки він закриється.
Pacerier

Результати завдання в рамках прав адміністратора: доступ заборонено.
amuliar

22

Отримайте провідник процесів від sysinternals (зараз Microsoft)

Провідник процесів - Windows Sysinternals | Документи Microsoft


15
Це дає більше інформації (і деяку обмежену можливість пошуку ручок блокування), але я не мав більшого успіху в убивстві завдань, ніж з базовим диспетчером завдань. Деякі процеси (наприклад, антивірус і SugarSync.exe) просто відмовляються померти.
Джон Кумбс

15

Один трюк, який добре працює, - це приєднати налагоджувач і потім вийти з налагоджувача.

У XP або Windows 2003 ви можете це зробити за допомогою ntsd, який постачається з коробки:

ntsd -pn myapp.exe

ntsd відкриє нове вікно. Просто наберіть 'q' у вікні, щоб вийти з налагоджувача і вийняти процес.

Я знаю, що це працює навіть тоді, коли диспетчер завдань, здається, не в змозі вбити процес.

На жаль, ntsd був видалений з Vista, і вам доведеться встановити (безкоштовні) інструменти налагодження для Windows, щоб отримати відповідний налагоджувач.


1
Дякую ТАКІ МНОГО за це. Додайте "-c q" (без лапок) для автозапуску, що робить його ідеальним вбивцею процесу.
Джоаніс

2
Коли налагоджена Visual Studio і програма налагоджуються, приєднуються та вбивають старий екземпляр VS. Вбивця може бути новим екземпляром VS, який може потім відкрити старий проект і дати можливість продовжувати роботу.
Бруно Мартінес

Я не можу зрозуміти, як завантажити що-небудь із цього посилання, крім того winsdk_web.exe, що нічого не робить.
ендоліт

Тепер ви можете отримати його у пакеті SDK для Windows 10, запустивши інсталятор, а потім зніміть прапорець усе, крім "Інструменти налагодження для Windows" ( docs.microsoft.com/en-us/windows-hardware/drivers/debugger/… )
Coburn

6

встановіть команду AT для запуску менеджера завдань або провідника процесів як SYSTEM.

AT 12:34 /interactive "C:/procexp.exe"

Якщо провідник процесів знаходився на вашому кореневому диску C, це відкрило б його як SYSTEM, і ви можете вбити будь-який процес, не отримуючи жодних помилок у доступі. Встановіть це як хвилину в майбутньому, тоді воно з’явиться для вас.


4
При спробі цього я отримую таке попередження, тому воно, здається, більше не працює: "Попередження: Завдяки покращенню безпеки це завдання буде виконуватися в очікуваний час, але не в інтерактивному режимі. Використовуйте утиліту schtasks.exe, якщо потрібна інтерактивна задача ('schtasks /? 'для деталей). "
WhiteKnight

0

Коли доступ до ntsd заборонено, спробуйте:

ZeroWave був розроблений як простий інструмент, який забезпечить багаторівневе завершення будь-якого процесу.

ZeroWave - це також проста у користуванні програма завдяки простому встановленню та дуже дружньому графічному інтерфейсу.

ZeroWave має три режими припинення і за допомогою режиму "INSANE" може припинити будь-який процес, який може працювати в Windows.

Схоже, ZeroWave не може вбити avp.exe


0

FYI, ви можете іноді використовувати SYSTEM або Trustedinstaller для вбивства завдань;)

google quickkill_3_0.bat

sc config TrustedInstaller binPath= "cmd /c TASKKILL /F  /IM notepad.exe
sc start "TrustedInstaller"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.