Действительно убивает процесс в Windows

375

Иногда программа на машине с Windows сходит с ума и просто зависает. Поэтому я вызову диспетчер задач и нажму на кнопку «Завершить процесс». Однако это не всегда работает; если я попытаюсь сделать это достаточно много раз, то он, в конце концов, умрет, но я бы очень хотел иметь возможность просто убить его немедленно. В Linux я мог просто kill -9гарантировать, что процесс умрет.

Это также может быть использовано для написания пакетных сценариев, а написание пакетных сценариев является программированием.

Есть ли какая-нибудь программа или команда, которая поставляется с Windows, которая всегда убивает процесс? Было бы неплохо бесплатное стороннее приложение, хотя я бы предпочел делать это на машинах, на которых я сижу впервые.

Эли Кортрайт
источник
19
Блуждающие процессы - достаточно распространенная проблема в программировании, с которой я не согласен; это не не по теме вопрос.
Дэн Молдинг
19
Я занимаюсь управлением процессами каждый день как разработчик. Это полностью на тему для меня!
Джон Фицпатрик
14
Я настоятельно рекомендую не удалять этот вопрос. +195, и это действительно ранний хит Google по этому вопросу.
Джошуа
2
«Если они не связаны напрямую с инструментами, используемыми в основном для программирования», я столкнулся с этой проблемой в том, что Visual Studio поддерживает выполнение процесса, из-за которого я не смог его убить. Закрытие Visual Studio помогло убить проблемный процесс.
Иоаким
Вы можете использовать командлет PowerShell Stop-Process .
Росберг Линхарес

Ответы:

318

«Завершить процесс» в вызовах «Процессы-вкладка», TerminateProcessчто является наиболее совершенным способом, которым Windows знает, как убить процесс.

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

Посмотрите на эту запись в блоге с пути назад, когда: http://blogs.technet.com/markrussinovich/archive/2005/08/17/unkillable-processes.aspx

Системы на основе Unix, такие как Linux, также имеют ту проблему, когда процессы могут выжить, kill -9если они находятся в так называемом «бесперебойном спящем режиме» (обозначается как top и ps как состояние D), и в этот момент процессы спят так хорошо, что не могут обрабатывать входящие сигналы. (что killделает - отправка сигналов).

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

pilif
источник
29
Хотя я ненавижу, что это правильный ответ, я не сомневаюсь, что он более правильный, чем тасклилл ниже .... глупые глючные драйверы!
Codetaku
6
Немного меньше раздражает, чем перезагрузка, чтобы снова выйти из системы. Все еще теряют работу, но не так много времени, возможно.
awidgery
8
это вызвано тем, что какой-то другой процесс всегда выполняет начальный процесс. Вы убили свою старую инстанцию, и сторожевая
собака запустила новую
8
Этот ответ не является правильным на всех. «Конечный процесс» - не самый лучший способ уничтожения процессов, так как он не может уничтожить процессы службы (например). taskkill /fсамый конечный.
user626528
5
TaskKill / f вызывает только TerminateProcessAPI. Он делает то же самое, что и диспетчер задач (хотя, вы правы, с повышенными привилегиями).
Пилиф
233
taskkill /im myprocess.exe /f

«/ F» означает «сила». Если вы знаете PID, вы можете указать это, как в:

taskkill /pid 1234 /f

Возможно множество других опций, просто введите taskkill /? для всех них. Параметр "/ t" убивает процесс и любые дочерние процессы; это может быть полезно для вас.

JosephStyons
источник
10
Просто записка. Это особенно полезно, если вы пишете сценарии для управления сервером. kill.exe (из набора NT Res) приведет к закрытию программы, но если у вас установлен обработчик сбоя (в частности, windbg), это может вызвать проблемы, так как ОС увидит завершенный процесс как сбойный и попытается отладить Это. Taskkill не приведет к этой проблеме.
Аарон
6
@lzprgmr - taskkill и «конечная задача», вероятно, оба вызывают одну и ту же базовую оконную
JosephStyons
60
Это не более эффективно, чем «завершить процесс» из диспетчера задач.
Эдди
2
Я пытался принудительно убить SugarSync.exe без перезагрузки (поскольку повторный запуск SugarSync до того, как он действительно заработал, заставляет его работать снова), но taskkill / T / F / IM SugarSync.exe не работает - хотя это утверждает, что "УСПЕХ"
Джон Кумбс
2
БЛАГОДАРЮ ВАС! taskkill /pid 1234 /fработает, когда End Task отказывается работать! ВОТ ЭТО ДА!
Хенди Ираван
37

У Process Hacker есть множество способов убить процесс.

(Щелкните правой кнопкой мыши процесс, затем перейдите в Разное-> Терминатор.)

user541686
источник
5
Не могу найти много способов подтверждения, так как поиск этого приводит к миллионам БЕСПЛАТНЫХ ЗАГРУЗКИ !!! ссылки. Но он делает то, что говорит, вирус рискует и все такое.
bwerks
2
@Nuzzolilo: Конечно! Щелкните правой кнопкой мыши процесс, перейдите в Разное-> Терминатор.
user541686
6
Не работает на всех процессах, у меня был один, который пережил все варианты.
Цитрак
7
Это окрасило мой компьютер. Процесс ушел после перезагрузки. Хорошая работа ... -.- '
Педро Оливейра
5
К сожалению, терминатор удален в v2.39 :(
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/…
Дхрув Чандхок
В моем случае, процесс зомби, который я велел убить, был единственным ребенком, и не было родителя, хотя зомби все еще думал, что у него есть родитель. В моем случае это решается с помощью пути к расширенному восстановлению параметров Windows 8.1, но при этом отменяется стирание любого диска и полная принудительная перезагрузка. Регулярное выключение и перезагрузка - это действительно режим сна / гибернации (чтобы сэкономить время при запуске). Нетривиально заставить его сделать полное отключение.
Джесси Чисхолм
«Отказано в доступе» означает, что процесс уже находится в процессе закрытия. Например, если вы только что пытались закрыть его раньше. Вам нужно подождать, пока он не закроется.
Пейсер
Результаты TaskKill под правами администратора: доступ запрещен.
amuliar
22

Получить проводник процессов от sysinternals (сейчас Microsoft)

Process Explorer - Windows Sysinternals | Документы Microsoft

Iain Holder
источник
15
Это дает больше информации (и некоторую ограниченную возможность поиска дескрипторов блокировки), но я не добился большего успеха при уничтожении задач с ним, чем с помощью основного диспетчера задач. Некоторые процессы (например, антивирус и SugarSync.exe) просто отказываются умирать.
Джон Кумбс
15

Один из приемов, который хорошо работает, - подключить отладчик и затем выйти из него.

В XP или Windows 2003 вы можете сделать это с помощью ntsd, который поставляется из коробки:

ntsd -pn myapp.exe

NTSD откроет новое окно. Просто введите «q» в окне, чтобы выйти из отладчика и завершить процесс.

Я знал, что это работает, даже когда диспетчер задач не может остановить процесс.

К сожалению, ntsd был удален из Vista, и вы должны установить (бесплатные) средства отладки для Windows, чтобы получить подходящий отладчик.

Роб Уокер
источник
1
Спасибо тебе большое за это. Добавьте «-c q» (без кавычек) в autoquit, что делает его идеальным убийцей процессов.
Джоанис
2
Когда Visual Studio и отлаживаемое приложение зависают, подключают и уничтожают старый экземпляр VS. Убийца может быть новым экземпляром VS, который затем может открыть старый проект и позволить вам продолжить работу.
Бруно Мартинес
Я не могу понять, как загрузить что-либо из этой ссылки, кроме winsdk_web.exe, которая ничего не делает.
эндолит
Теперь вы можете получить его в Windows 10 SDK, запустив установщик, а затем сняв все отметки, кроме «Средства отладки для 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

diyism
источник
0

К вашему сведению, иногда вы можете использовать SYSTEM или Trustedinstaller для уничтожения задач;)

google quickkill_3_0.bat

sc config TrustedInstaller binPath= "cmd /c TASKKILL /F  /IM notepad.exe
sc start "TrustedInstaller"
RmccurdyDOTcom
источник