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

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

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

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

11 ответов

Решение

"Завершить процесс" в вызовах "Процессы" TerminateProcess это самый лучший способ, которым Windows знает, чтобы убить процесс.

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

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

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

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

taskkill /im myprocess.exe /f

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

taskkill /pid 1234 /f

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

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

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

JosepStyons прав. Откройте cmd.exe и запустите

taskkill /im processname.exe /f

Если есть ошибка, говорящая,

ОШИБКА: процесс "process.exe" с PID 1234 не может быть прерван. Причина: доступ запрещен.

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

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

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

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

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

ntsd -pn myapp.exe

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

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

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

Настроить AT-команду для запуска диспетчера задач или проводника процессов как SYSTEM.

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

Если бы проводник процессов находился в вашем корневом диске C, то он бы открывал его как SYSTEM, и вы могли бы уничтожить любой процесс, не получив никаких ошибок в доступе. Установите это как минуту в будущем, тогда оно появится для вас.

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

google quickkill_3_0.bat

sc config TrustedInstaller binPath= "cmd /c TASKKILL /F  /IM notepad.exe
sc start "TrustedInstaller"

У меня тоже была эта проблема, вот как я ее решил.

1 / Откройте «диспетчер задач» 

2 / Найдите название приложения в списке

3 / Найдя, щелкните правой кнопкой мыши по его имени, затем нажмите «Свойства».

4 / В интерфейсе свойств нажмите «безопасность» 

5 / Нажмите «изменить», чтобы изменить разрешения.

6 / «Запретить» все разрешения для всех пользователей, нажмите «Применить», затем «ОК»

7 / нажмите «Дополнительно» для настройки специальных разрешений.

8 / Удалить разрешения для всех пользователей

9 / нажмите «Применить», затем «ОК»

10 / нажмите «Применить», затем снова «ОК»

11 / теперь вы можете убить процесс в диспетчере задач, а также удалить приложение, которое вы хотите.

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

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

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

ZeroWave имеет три режима завершения и в режиме "INSANE" может завершить любой процесс, который может выполняться в Windows.

Кажется, что ZeroWave не может убить avp.exe

wmic process where processid="11008" call terminate

Другие вопросы по тегам