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

322

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

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

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

  • 66
    Это может быть не по теме, но я действительно рад, что кто-то спросил.
  • 19
    Блуждающие процессы - достаточно распространенная проблема в программировании, с которой я не согласен; это не вопрос вне темы.
Показать ещё 5 комментариев
Теги:

8 ответов

276
Лучший ответ

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

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

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

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

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

  • 27
    Хотя я ненавижу, что это правильный ответ, я не сомневаюсь, что он более правильный, чем тасклилл ниже .... глупые глючные драйверы!
  • 6
    Немного меньше раздражает, чем перезагрузка, чтобы снова выйти из системы. Все еще теряют работу, но не так много времени, возможно.
Показать ещё 12 комментариев
180
taskkill /im myprocess.exe /f

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

taskkill /pid 1234 /f

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

  • 10
    Просто записка. Это особенно полезно, если вы пишете сценарии для управления сервером. kill.exe (из набора NT Res) приведет к закрытию программы, но если у вас установлен обработчик сбоя (в частности, windbg), это может вызвать проблемы, так как ОС увидит завершенный процесс как сбойный и попытается отладить Это. Taskkill не приведет к этой проблеме.
  • 0
    Я думаю, что TaskManager вызвать TaskKill изнутри? они на самом деле одно и то же?
Показать ещё 12 комментариев
35

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

Изображение 7264

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

  • 5
    Не могу найти много способов подтверждения, так как поиск этого приводит к миллионам БЕСПЛАТНЫХ ЗАГРУЗКИ !!! ссылки. Но он делает то, что говорит, вирус рискует и все такое.
  • 1
    Эта программа работала нормально для нас. Мы убили две программы, которые невозможно было убить другими инструментами, упомянутыми в этой теме.
Показать ещё 16 комментариев
22

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

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

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

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

taskkill /im processname.exe /f

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

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

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

  • 8
    Запуск от имени администратора, ошибка меняется. Теперь он говорит: 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/…
Показать ещё 3 комментария
13

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

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

ntsd -pn myapp.exe

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

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

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

  • 1
    Спасибо вам большое за это. Добавьте «-c q» (без кавычек) в autoquit, что делает его идеальным убийцей процессов.
  • 2
    Когда Visual Studio и отлаживаемое приложение зависают, подключают и уничтожают старый экземпляр VS. Убийца может быть новым экземпляром VS, который затем может открыть старый проект и позволить вам продолжить работу.
Показать ещё 1 комментарий
6

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

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

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

  • 4
    При попытке сделать это я получаю следующее предупреждение, поэтому оно, похоже, больше не работает: «Предупреждение: из-за улучшений безопасности эта задача будет выполняться в ожидаемое время, но не в интерактивном режиме. Используйте утилиту schtasks.exe, если требуется интерактивная задача ('schtasks»). /? 'для деталей). "
0

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню