- Команда TASKKILL — завершить процесс.
- Примеры использования TASKKILL.
- Завершение процесса из командной строки
- Завершение процесса по его имени
- Завершение процесса по его PID
- Расширенные условия фильтрации процессов
- Работа с другим компьютером
- Как принудительно завершить процесс зависшей службы в Windows?
- Завершение зависшей службы с помощью TaskKill
- Принудительное завершение зависшей службы из PowerShell
- Анализ зависших процессов с помощью Resmon
- Process Explorer: Завершение зависшего процесса из-под SYSTEM
- Завершение процессов в Windows командой taskkill
Команда TASKKILL — завершить процесс.
Команда TASKKILL используется для завершения процессов по идентификаторам или именам исполняемых файлов на локальной или удаленной системе. Используется в операционных системах Windows XP и старше.
Формат командной строки:
Описание параметров командной строки :
/S система — Имя или IP-адрес удаленного компьютера.
/U [домен\]пользователь — Пользовательский контекст, в котором должна выполняться эта команда.
/P пароль — Пароль для этого пользовательского контекста. Запрашивается, если он не задан.
/FI фильтр — Применение фильтра для выбора набора задач. Разрешение использовать «*». Пример, imagename eq acme*
/PID процесс — Идентификатор процесса, который требуется завершить. Используйте TaskList, чтобы получить PID.
/IM образ — Имя образа процесса, который требуется завершить. Знак подстановки «*» может быть использован для указания всех заданий или имен образов.
/T — Завершение указанного процесса и всех его дочерних процессов.
/F — Принудительное завершение процесса.
/? — Вывод справки по использованию.
Имя фильтра ———— STATUS IMAGENAME MODULES | Допустимые операторы ————— eq, ne eq, ne eq, ne, gt, lt, ge, le eq, ne | Допустимые значения ————————- RUNNING | NOT RESPONDING | UNKNOWN Имя образа Значение PID Номер сессии Время CPU в формате hh:mm:ss. hh — часы, mm — минуты, ss — секунды Использование памяти в КБ Имя пользователя в формате [домен\]пользователь Имя DLL Имя службы Заголовок окна |
  Примечание:
1) Символ ‘*’ для параметра /IM применим только совместно с фильтрами.
2) Завершение удаленных процессов всегда будет принудительным (/F).
3) Фильтры «WINDOWTITLE» и «STATUS» не принимаются во внимание, когда компьютер является удаленным.
Примеры использования TASKKILL.
taskkill /? > taskkill.txt — выдать справку по использованию команды в текстовый файл taskill.txt
TASKKILL /IM notepad.exe — завершить процесс, исполняемым образом которого является notepad.exe . Если таких процессов более одного — то будут завершены все.
taskkill /PID 1234 /T — завершить процесс с идентификатором 1234 и все его дочерние процессы ( /T ) . Одной командой можно завершить несколько процессов, задавая их PID — taskkill /PID 1234 /PID 2345 /PID 800 . Для определения идентификатора процессов используется команда tasklist :
tasklist | find /I «notepad» — отобразить информацию для процессов с именем, содержащим строку notepad . В ответ будет выдано сообщение, например:
notepad.exe        824 Console       1       3 916 КБ
notepad.exe      3004 Console       1      18 812 КБ
Где 824 и 3004 — это идентификаторы процессов PID
TASKKILL /F /FI «PID ge 2000» /FI «WINDOWTITLE eq Arc*» — принудительно (/F) завершить процесс, идентификатор которого больше или равен 2000 и заголовок окна которого , начинается с текста Arc
TASKKILL /F /FI «USERNAME eq NT AUTHORITY\SYSTEM» /IM notepad.exe — принудительно завершить процесс, выполняющийся в контексте учетной записи NT AUTHORITY\SYSTEM и исполняемый файл которого имеет имя notepad.exe
TASKKILL /S 192.168.0.243 /U MyDomain\user /FI «USERNAME ne NT*» /IM * — завершить все процессы, выполняющиеся в контекстах учетных записей, не начинающихся со строки NT на компьютере с IP-адресом 192.168.0.243. При подключении к удаленной системе используется имя пользователя user в домене Mydomain . Пароль не задан и будет запрошен при выполнении команды.
TASKKILL /S SERVER /U Mydomain\User /P UserPass /FI «IMAGENAME eq note*» — завершить все процессы, имя исполняемого файла которых начинается со строки note на удаленном компьютере с именем SERVER .
При завершении процессов как локально, так и удаленно, результат выполнения команды TASKKILL зависит от прав пользователя, в контексте учетной записи которого выполняется команда.
Для использования в многопользовательской конфигурации системы, например на сервере терминалов, вместо команды TASKKILL, удобнее и безопаснее использовать команду TSKILL, адаптированную для завершения процессов в среде конкретных пользователей удаленного рабочего стола (RDP).
Если вы желаете поделиться ссылкой на эту страницу в своей социальной сети, пользуйтесь кнопкой «Поделиться»
Завершение процесса из командной строки
Как должно быть Вам известно, процесс можно запросто завершить, выбрав соответствующий пункт в диспетчере задач. Однако, так же есть возможность завершения нужного процесса через командную строку, с помощью программы taskkill, которая идет по умолчанию с любой операционной системой Windows. Рассмотрим различные примеры применения этой программы.
Завершение процесса по его имени
Данный вариант идеально подходит для ситуаций, когда нужно завершить процесс или группу процессов с одинаковым именем. Делается это следующей командой:
где _ИМЯ_ПРОЦЕССА_ — это имя процесса, например calc.exe. То есть, для завершения процесса программы «Калькулятор», нужно выполнить следующую команду:
Завершение процесса по его PID
Еще процесс можно завершить по его идентификатору в системе — удобно, в том случае, если Вам нужно завершить какой-то определенный процесс, имя которого, к примеру, совпадает с именами других процессов. Получить PID можно выполнив команду tasklist :
Найдя нужный процесс и его PID, можно перейти к его завершению. Делается это так:
где вместо _PID_ должен быть настоящий PID процесса.
Расширенные условия фильтрации процессов
Помимо флагов /IM и /PID, которые отвечают за отбор процессов по имени и PID, соответственно, программа taskkill поддерживает множество других параметров, которые становятся доступны при использовании флага /FI:
- CPUTIME — время CPU
- IMAGENAME — имя образа
- MEMUSAGE — использование памяти в Кбайтах
- MODULES — имя DLL
- PID — значение
- SERVICES — имя службы
- SESSION — номер сессии
- STATUS — статус
- USERNAME — имя пользователя
- WINDOWTITLE — заголовок окна
Так же программа умеет работать со следующими операторами сравнения:
- * — любые символы
- eq — равно
- ge — больше или равно
- gt — больше чем
- le — меньше или равно
- lt — меньше чем
- ne — не равно
Разберем на примерах. Например, нужно закрыть процесс iexplore (наименование процесса браузера Internet Explorer) у пользователя Ivan:
Завершим все процессы пользователя Ivan:
Работа с другим компьютером
Программа taskkill так же умеет работать с другим компьютером — для этого используются три следующих флага:
- /S — имя или адрес удаленного компьютера
- /U — имя пользователя
- /P — пароль пользователя
К примеру, если нужно на компьютере с адресом 192.168.100.1 «убить» процесс notepad.exe, то нужно выполнить следующую команду:
Где, как должно быть понятно 192.168.100.1 — адрес компьютера, user — имя пользователя, 12345678 — пароль.
Если эти действия нужно сделать с компьютером, который находится в одном домене с Вашим текущим пользователем, и он обладает правами администратора (например, он администратор домена), то можно выполнить выше указанную команду без указания конкретного пользователя:
Как принудительно завершить процесс зависшей службы в Windows?
Как завершить процесс службы Windows, зависшей в статусе stopping (остановка)? Думаю, большинство администраторов Windows, встречалось с ситуациями, когда при попытке остановить (перезапустить) службу из графического интерфейса консоли управления службами (Services.msc), служба зависает намертво и висит в статусе Stopping. После этого вы не можете остановить службу в консоли, т.к. кнопки действий службы становятся недоступными. Самый простой способ – перезагрузить сервер, но это не всегда допустимо. Рассмотрим альтернативный способ, позволяющий принудительно завершить зависшую службу или процесс без необходимости перезагрузки.
Если в течении 30 секунд после попытки остановки службы, она не останавливается, Windows выводит сообщение:
При попытке остановить такую службу командой: net stop wuauserv, появляется сообщение:
The service is starting or stopping. Please try again letter.
Завершение зависшей службы с помощью TaskKill
Наиболее простой способ завершить зависшую служу – воспользоваться утилитой taskkill. В первую очередь нужно определить PID (идентификатор процесса) нашей службы. В качестве примера возьмем службу Windows Update, ее системное имя wuauserv (имя можно посмотреть в свойствах службы в консоли services.msc).
В командной строке с правами администратора (это важно, иначе будет ошибка access denied):
sc queryex wuauserv
В данном случае PID процесса — 816.
Чтобы принудительно завершить зависший процесс с PID 816:
taskkill /PID 816 /F
SUCCESS: The process with PID 816 has been terminated.
Данная команда принудительно завершит процесс службы. В дельнейшем можно вернуться в консоль управления службами и вручную стартовать службу (или совсем удалить эту службу, если она не нужна).
«Выстрел в голову» зависшей службы можно выполнить и более элегантно, не выполняя ручное определение PID процесса. У утилиты taskkill есть параметр /FI, позволяющий использовать фильтр для выбора необходимых служб или процессов. Вы можете остановить конкретную службу командой:
TASKKILL /F /FI “SERVICES eq wuauserv”
Или можно вообще не указывать имя, службы, завершив все сервисы в зависшем состоянии с помощью команды:
taskkill /F /FI “status eq not responding”
После этого служба, зависшая в статусе Stopping должна остановиться.
Принудительное завершение зависшей службы из PowerShell
Также вы можете использовать PowerShell для принудительной остановки службы. С помощью следующей команды можно получить список служб, находящихся в состоянии Stopping:
Get-WmiObject -Class win32_service | Where-Object
Завершить процесс для всех найденных служб поможет командлет Stop-Process. Объединив обе операции в цикл, получим скрипт, автоматически завершающий все процессы подвисших служб в системе:
$Services = Get-WmiObject -Class win32_service -Filter «state = ‘stop pending'»
if ($Services) <
foreach ($service in $Services) <
try <
Stop-Process -Id $service.processid -Force -PassThru -ErrorAction Stop
>
catch <
Write-Warning -Message » Error. Error details: $_.Exception.Message»
>
>
>
else <
Write-Output «No services with ‘Stopping’.status»
>
Анализ зависших процессов с помощью Resmon
Вы можете определить процесс, из-за которого зависла служба с помощью монитора ресурсов resmon.
- В окне Монитора ресурсов перейдите на вкладку ЦП (CPU) и найдите процесс зависшей службы;
- Выберите пункт Анализ цепочки ожидания (AnalyzeWaitChain);
- В новом окне скорее всего вы увидите, что вам процесс ожидает другой процесс. Завершите его. Если выполняется ожидание системного процесса svchost.exe, завершать его не нужно. Попробуйте проанализировать цепочку ожидания для этого процесса. Найдите PID процесса, которого ожидает ваш svchost.exe и завершите его.
Process Explorer: Завершение зависшего процесса из-под SYSTEM
Некоторые процессы, запущенные из-под SYSTEM, не может завершить даже локальный администратора сервера. Дело в том, что у него просто может не быть прав на некоторые процессы или службы. Чтобы завершить такие процесс (службы), вам необходимо предоставить локальной группе Administrators права на службу (процесс), а потом завершить их. Для этого нам понадобятся две утилиты: psexec.exe и ProcessExplorer (доступны на сайте Microsoft).
- Для запуска ProcessExplorer с правами системы (SYSTEM), его нужно стартовать таким образом: PSExec -s -i ProcExp.exe
- В списке процессов Process Explorer найдите процесс зависшей службы и откройте ее свойства;
- Перейдите на вкладку Services, найдите свою службу и нажмите кнопку Permissions;
- В разрешения службы предоставьте права FullControl для группы администраторов (Administrators). Сохраните изменения;
- Теперь попробуйте завершить процесс службы.
Завершение процессов в Windows командой taskkill
Иногда возникает необходимость вручную завершить процесс, который не отвечает. В большинстве случаев это можно сделать с помощью Диспетчера задач Windows, однако порой ему не удается справиться с вышедшим из под контроля приложением. Мне часто приходилось сталкиваться с этим при попытке завершить процесс Acronis. В такой ситуации я обычно использую более мощный инструмент — команду taskkill.
Чтобы воспользоваться taskkill, нужно открыть окно командной строки. Для этого вызовите окно «Выполнить» (Run) из меню «Пуск» (Start) или воспользуйтесь клавишной комбинацией [Win]+[R] и введите «cmd» (без кавычек) в поле «Открыть» (Open, рис. A).
Использование команды taskkill
Общий синтаксис команды выглядит следующим образом:
Разумеется, для taskkill доступен широкий выбор опций. Перечислю лишь наиболее полезные из них:
• /s КОМПЬЮТЕР, где КОМПЬЮТЕР — это IP или адрес удаленного компьютера. По умолчанию, операция выполняется в локальной системе. Если именно это вас и интересует, данную опцию можно не использовать.
• /u ДОМЕН\ПОЛЬЗОВАТЕЛЬ, где ДОМЕН — это имя домена, а ПОЛЬЗОВАТЕЛЬ — имя пользователя, для которого нужно выполнить команду. Данная опция позволяет запускать taskkill с правами определенной учетной записи или домена.
• /p — обязательно используется в сочетании с опцией /u для указания пароля к учетной записи пользователя.
• /fi — позволяет выполнять команду taskkill с определенными фильтрами.
• /f — принудительно завершает выполнение команды.
• /IM — позволяет использовать имя приложения вместо идентификатора процесса.
Ну и разумеется, одна из самых полезных опций — переключатель для вызова справки (рис. В):
Рисунок B. Вывод справочной информации по команде taskkill при использовании переключателя справки.
Завершение процесса по имени приложения
Проще всего завершить вышедший из-под контроля процесс, воспользовавшись командой taskkill с использованием опции /IM. Выглядеть это будет так:
Здесь ИМЯ_ПРИЛОЖЕНИЯ — это имя процесса, который требуется завершить. К примеру, если Outlook не удается закрыть, можно воспользоваться следующей командой:
Завершение процесса по идентификатора
Если вы не знаете имени процесса, но знаете его идентификатор (PID) — например, 572 — можно воспользоваться следующей командой:
Завершение всех процессов для определенной учетной записи
Существует также возможность завершить все процессы для определенной учетной записи. Это особенно актуально, если совершенно точно известно, что проблема связана с определенной учетной записью, или если пользователь уже вышел из системы, а запущенные им процессы перестали отвечать. В таком случае можно воспользоваться следующей командой:
Здесь имя_пользователя — это имя учетной записи, под которой запущены нежелательные процессы. Обязательно нужно включить в команду опцию USERNAME, чтобы указать соответствующее имя пользователя.
Завершение процессов на удаленном компьютере
Еще одна удобная возможность — завершение процессов в удаленном режиме. Допустим, вы точно знаете, что система не отвечает из-за определенного процесса (возьмем для примера все тот же Outlook). В таком случае можно воспользоваться другим компьютером и выполнить следующую команду:
Здесь IP-АДРЕС — адрес удаленного компьютера (можно использовать и имя хоста, если компьютеры способны распознавать друг друга таким способом), ДОМЕН — имя домена (если требуется), а ПОЛЬЗОВАТЕЛЬ — имя пользователя, под которым был осуществлен вход на удаленный компьютер.
Команда taskkill — весьма мощный и функциональный инструмент, способный избавить от необходимости принудительной перезагрузки компьютера. Умелое использование этой команды в сочетании с Диспетчером задач продлевает время безотказной работы системы и даже позволяет бороться с вирусами, руткитами или троянцами.