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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

taskkill /im myprocess.exe /f

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

taskkill /pid 1234 /f

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

Ответ 3

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

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

Ответ 5

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

taskkill /im processname.exe /f

Если есть сообщение об ошибке,

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

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

Ответ 6

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

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

ntsd -pn myapp.exe

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

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

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

Ответ 7

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

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

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

Ответ 8

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

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

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

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

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