Как принудительно завершить процесс в windows 7
Перейти к содержимому

Как принудительно завершить процесс в windows 7

  • автор:

Команда TASKKILL — завершить процесс.

Команда TASKKILL используется для завершения процессов по идентификаторам или именам исполняемых файлов на локальной или удаленной системе. Используется в операционных системах Windows XP и старше.

Формат командной строки:

Описание параметров командной строки :

/S система — Имя или IP-адрес удаленного компьютера.

/U [домен\]пользователь — Пользовательский контекст, в котором должна выполняться эта команда.

/P пароль — Пароль для этого пользовательского контекста. Запрашивается, если он не задан.

/FI фильтр — Применение фильтра для выбора набора задач. Разрешение использовать «*». Пример, imagename eq acme*

/PID процесс — Идентификатор процесса, который требуется завершить. Используйте TaskList, чтобы получить PID.

/IM образ — Имя образа процесса, который требуется завершить. Знак подстановки «*» может быть использован для указания всех заданий или имен образов.

/T — Завершение указанного процесса и всех его дочерних процессов.

/F — Принудительное завершение процесса.

/? — Вывод справки по использованию.

IMAGENAME
PID
SESSION
CPUTIME

eq, ne
eq, ne, gt, lt, ge, le
eq, ne, gt, lt, ge, le
eq, ne, gt, lt, ge, le

eq, ne, gt, lt, ge, le
eq, ne

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 &nbsp &nbsp &nbsp &nbsp824 Console &nbsp &nbsp &nbsp 1 &nbsp &nbsp &nbsp 3 916 КБ
notepad.exe &nbsp &nbsp &nbsp3004 Console &nbsp &nbsp &nbsp 1 &nbsp &nbsp &nbsp18 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 — завершение процесса из командной строки

В данном видео мы рассмотрим команду Taskkill, которая позволяет завершать определенные процессы из командной строки в операционной системе Windows. Но в начале, как всегда, рассмотрим, зачем это вообще может понадобиться.

На обычных рабочих станциях данная команда не особо востребована, так как можно завершить процесс через диспетчер задач. Хотя, не всегда это получается и в данной ситуации команда Taskkill пригодится, но, это скорее исключение из правил.

В основном, данная команда используется системными администраторами и лично я сталкивался со следующими ситуациями:

1) Обновление программ на терминальном сервере – при администрировании терминального сервера большое количество людей может запустить одно и тоже приложение. Но, в большинстве случаев, при обновлении программы её необходимо сначала закрыть, т.е. завершить её процесс. Если клиентов не много, то, можно воспользоваться диспетчером задач, а если их порядка 100, то это уже проблематично. А команда Taskkill позволяет убить все процессы для определенного приложения.

2) Автоматический перезапуск программы – как вы знаете не все программы работают идеально и бывает, что они подвисают. А если данная программа должна работать 24 часа в сутки и 7 дней в неделю, то приходится периодически проверять её работоспособность.

Лично я сталкивался со следующей ситуацией: есть интернет магазин, в который данные о товарах выгружаются из 1С-ки. Но, обработчик написан как-то криво, в результате чего обмен подвисает раз в сутки, а то и через каждые 2-3 часа. По этому, появилась необходимость каждый час принудительно перезапускать обработчик, не зависимо от того, подвисла программа или нет.

И так, перейдем к практике.

Запустим браузер Google Chrome и попробуем завершить его процесс (Пуск \ Стандартные \ Выполнить \ cmd \ taskkill /? — чтобы посмотреть синтаксис команды)

/s КОМПЬЮТЕР, где КОМПЬЮТЕР — это IP или адрес удаленного компьютера. По умолчанию, операция выполняется в локальной системе. Если именно это вас и интересует, данную опцию можно не использовать.

/u ДОМЕН\ПОЛЬЗОВАТЕЛЬ, где ДОМЕН — это имя домена, а ПОЛЬЗОВАТЕЛЬ — имя пользователя, для которого нужно выполнить команду. Данная опция позволяет запускать taskkill с правами определенной учетной записи или домена.

/p — обязательно используется в сочетании с опцией /u для указания пароля к учетной записи пользователя.

/fi — позволяет выполнять команду taskkill с определенными фильтрами.

/f — принудительно завершает выполнение команды.

/IM — позволяет использовать имя приложения вместо идентификатора процесса.

/T — завершение дерева процессов.

Теперь нам нужно узнать имя приложения, которое использует данный процесс. Это можно сделать через диспетчер задач (Ctrl+Alt+Del \ Запустить диспетчер задач \ Процессы \ chrome.exe).

Если у вас нет возможности запустить диспетчер задач, допустим, вы подключились к компьютеру удаленно через командную строку, то можно воспользоваться командой tasklist, она так же отображает все процессы.

Taskkill /f /im chrome.exe – принудительно завершить приложение с именем chrome.exe

Chrome завершил работу, но появились ошибки «Не удалось завершить процесс, ни один из экземпляров задания не запущен». Данное сообщение появляется из-за того, что эти процессы были связанными и когда завершил работу основной, остальные автоматически завершились.

Теперь запустим Chrome под разными пользователями, чтобы сымитировать работу терминального сервера, для этого запустим под обычным пользователем и под пользователем XP (Chrome \ Shift \ ПКМ \ Запустить от имени другого пользователя \ ОК). Теперь мы видим, что одно и тоже приложение запущено под разными пользователями, повторим команду Taskkill /f /im chrome.exe, чтобы проверить, для всех ли пользователей будет завершен процесс.

Теперь попробуем сделать автоматический перезапуск приложения, в этом нам поможет планировщик задач (Пуск \ Все программы \ Стандартные \ Служебные \ Планировщик заданий \ Библиотека планировщика \ ПКМ \ Создать папку \ Перезапуск Chrome – в зависимости от вашей цели)

Создаем задачу на запуск (Создать новую задачу \ Запуск \ Выполнять с наивысшими правами \ Триггер: по расписанию, ежедневно, начиная с 11:00, повторять каждый час бесконечно, включено \ Действия: запуск программы, chrome \ ОК)

Создадим задачу на завершение процесса (Создать новую задачу \ Завершение \ Выполнять с наивысшими правами \ Триггер: по расписанию, ежедневно, начиная с 10:59:50, повторять каждый час бесконечно, включено \ Действия: запуск программы, Taskkill, дополнительные аргументы: /f /im chrome.exe \ ОК)

Теперь запустим Chrome и подведем часы к более близкому времени, чтобы увидеть, как Хром завершит работу, а потом запустится заново.

Однако, порой требуется запретить только процесс запущенный под определенным пользователем. Именно такая ситуация у меня возникла с обработчиком 1С, который выгружал данные о товарах на сайт.

Дело в том, что, можно каждый час перезапускать зависшую 1С-ку, но, если завершать все процессы 1С, то все удаленные пользователи будут из неё вылетать, а этого нельзя допустить. По этому, нужно завершать процесс, запущенный из под определенной учетной записи.

Для этого в дополнительные аргументы добавим следующую строчку /fi username eq station-4-7” данная команда фильтрует по имени пользователя и завершает процесс только того, чье имя совпадает с указанным в фильтре.

Запустим Chrome под другим пользователем и посмотрим, сработал ли фильтр.

Как принудительно завершить зависшую службу в Windows?

date

05.08.2021

user

itpro

directory

Windows 10, Windows Server 2016, Windows Server 2019

comments

комментариев 5

Как завершить процесс службы Windows, которая зависла в статусе stopping (остановка) или starting (запуск)? Большинство администраторов Windows встречалось с ситуациями, когда при попытке остановить (перезапустить) службу из графического интерфейса консоли управления службами ( Services.msc ), служба зависает намертво и висит в статусе Stopping (или Starting). При этом все кнопки управления службой в консоли (Start, Stop, Restart) становятся недоступными (серыми). Самый простой способ – перезагрузить сервер, но это не всегда допустимо. Рассмотрим альтернативные способы, позволяющие принудительно завершить зависшую службу или процесс без необходимости перезагрузки Windows.

служба windows зависла в статусе stopping и не выключается

Если в течении 30 секунд после попытки остановки службы, она не останавливается, Windows выводит сообщение:

Не удалось остановить службу xxxxxxx Windows на локальном компьютере. Ошибка 1053. Служба не ответила на запрос своевременно.
Windows Could not stop the xxxxxx service on Local Computer Error 1053: The service did not respond in a timely fashion.

При попытке остановить такую службу командой: net stop wuauserv , появляется сообщение:

The service is starting or stopping. Please try again later.

net stop The service is starting or stopping. Please try again letter.

[SC] ControlService: ошибка: 1061: Служба в настоящее время не может принимать команды.
Windows could not stop the Service on Local Computer. Error 1061: The service cannot accept control messages at this time.

Как остановить зависшую службу Windows из командной строки?

Самый простой способ завершить зависшую служу – воспользоваться утилитой taskkill. В первую очередь нужно определить PID (идентификатор процесса) нашей службы. В качестве примера возьмем службу Windows Update. Ее системное имя wuauserv (имя можно посмотреть в свойствах службы в консоли services.msc ).

Очень часто можно встретится с зависанием службы Windows Modules Installer при перезагрузке сервера, особенно после установки обновлений на Windows Server 2012 R2 / 2016.

Важно. Будьте внимательными. Принудительная отставка процесса критичной службы Windows может привести к BSOD или перезагрузке операционной системы.

Отройте командную строку с правами правами администратора (иначе будет ошибка access denied) и выполите команду:
sc queryex wuauserv

В данном случае PID процесса — 9186 .

Чтобы принудительно завершить зависший процесс с PID 9186 воспользуйтесь утилитой taskkill:

taskkill /PID 9168 /F

завершить зависшую службу из командной строки с помощью утилиты taskkill

SUCCESS: The process with PID 9168 has been terminated.

Данная команда принудительно завершит процесс службы. Теперь вы можете запустите службу командой sc start servicename или через консоль управления службами (или совсем удалить эту службу, если она не нужна).

«Выстрел в голову» зависшей службы можно выполнить и более элегантно, не выполняя ручное определение PID процесса. У утилиты taskkill есть параметр /FI, позволяющий использовать фильтр для выбора необходимых служб или процессов. Вы можете остановить конкретную службу командой:

TASKKILL /F /FI “SERVICES eq wuauserv”

Или можно вообще не указывать имя, службы, завершив все сервисы в зависшем состоянии с помощью команды:

taskkill /F /FI “status eq not responding”

После этого служба, зависшая в статусе Stopping должна остановиться.

Также вы можете использовать утилиту taskkill для принудительной остановки зависших служб на удаленном компьютере:

TASKKILL /S CORPFS01 /F /FI “SERVICES eq wuauserv”

Принудительное завершение зависшей службы в PowerShell

Также вы можете использовать PowerShell для принудительной остановки службы. С помощью следующей команды можно получить список служб, находящихся в состоянии Stopping:

Get-WmiObject -Class win32_service | Where-Object

poweshell список служб в статусе stop pending

Завершить процесс для всех найденных служб поможет командлет Stop-Process. Следующий PowerShell скрипт завершит все процессы зависших служб в Windows:

$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»
>

powershell скрипт для принудительной остановки всех зависших служб

В новом PowerShell Core 6.x/7.x вместо командлета Get-WmiObject нужно использовать Get-CimInstance. Замените первую команду скрипта на:

$Services = Get-CimInstance -Class win32_service | where-Object state -eq ‘stop pending’

Анализ цепочки ожидания зависшего приложения с помощью ResMon

Вы можете определить процесс, из-за которого зависла служба с помощью монитора ресурсов ( resmon.exe ).

resmon анализ цепочки ожидания зависшей службы

  1. В окне Монитора ресурсов перейдите на вкладку ЦП (CPU) и найдите процесс зависшей службы;
  2. Выберите пункт Анализ цепочки ожидания (Analyze Wait Chain);
  3. В новом окне скорее всего вы увидите, что вам процесс ожидает другой процесс. Завершите его. Если выполняется ожидание системного процесса svchost.exe, завершать его не нужно. Попробуйте проанализировать цепочку ожидания для этого процесса. Найдите PID процесса, которого ожидает ваш svchost.exe и завершите его

Process Explorer: Завершение зависшего процесса из-под SYSTEM

Некоторые процессы, запущенные из-под SYSTEM, не может завершить даже локальный администратора сервера. Дело в том, что у него просто может не быть прав на некоторые процессы или службы. Чтобы завершить такие процесс (службы), вам необходимо предоставить локальной группе Administrators права на службу (процесс), а потом завершить их. Для этого нам понадобятся две утилиты: psexec.exe и ProcessExplorer (доступны на сайте Microsoft).

  1. Чтобы запустить утилиту ProcessExplorer с правами системы (SYSTEM), выполните команду: PSExec -s -i ProcExp.exe
  2. В списке процессов Process Explorer найдите процесс зависшей службы и откройте ее свойства;
  3. Перейдите на вкладку Services, найдите свою службу и нажмите кнопку Permissions;procexplorer - задать права на службу
  4. В разрешения службы предоставьте права FullControl для группы администраторов (Administrators). Сохраните изменения;полные права на службу для администратора
  5. Теперь попробуйте завершить процесс службы.

Обратите внимание, что права на службу и ее процесс выдались временно, до ее перезапуска. Для предоставления постоянных прав на службы познакомьтесь со статьей Права на службы в Windows.

Таймаут, в течении которого Service Control Manager ждет ожидания запуска или остановки службы можно изменить через параметр реестра ServicesPipeTimeout. Если служба не запускается в течении указанного таймаута, Windows записывает ошибку в Event Log (Event ID: 7000, 7009, 7011, A timeout was reached 30000 milliseconds). Вы можете увеличить этот таймаут, например до 60 секунд:

reg add HKLM\SYSTEM\CurrentControlSet\Control /v ServicesPipeTimeout /t REG_SZ /d 600000 /f

Это бывает полезным при запуске/остановки тяжелых служб, которые не успевают завершить все процессы быстро (например, MS SQL Server).

Как принудительно завершить процесс в windows 7

Будь в курсе последних новостей из мира гаджетов и технологий

iGuides для смартфонов Apple

Как в Windows «убить» программу, которую не может закрыть диспетчер задач

Александр

Александр Кузнецов — 15 июня 2019, 18:00

Представьте ситуацию: у вас есть программа, которая настолько нестабильно, что постоянно зависает. Иногда такие программы даже не дают компьютеру перезагрузиться, его работу приходится завершать аварийно — нажатием и долгим удержанием кнопки питания.

Прежде всего, стоит попробовать закрыть программу через стандартный диспетчер задач. Нажмите Alt+Ctrl+Del, во вкладке «Приложения» найдите зависшую программу и нажмите «Снять» задачу.

Диспетчер задач

Если это не помогло, перейдите во вкладку «Процессы», найдите зависший процесс и нажмите «Завершить процесс». В большинстве случаев зависшая программа после этого закроется.

Диспетчер задач

Там, где стандартный диспетчер задач не справляется, поможет более продвинутая программа — Process Explorer. Она выпущена сторонним разработчиком, но распространяется Microsoft, доступна бесплатно, не требует установки и работает на Windows XP, 7 и 8.

Зайдите на сайт Microsoft, скачайте архив Process Explorer, распакуйте его и запустите с правами администратора файл procexp.exe. Вы увидите список всех запущенных программ. Выполняемые ими процессы показаны в древовидной форме. Вполне вероятно, что закрытию проблемной программы диспетчером задач мешало то, что доступ к зависшему процессу блокировал процесс более высокой иерархии. В первом столбике показано, сколько процессорного времени потребляет каждый процесс. У зависшего это значение будет близко к ста процентам. Обнаружить зависшее приложение можно, отсортировав процессы по величине нагрузки на процессор или потребления оперативной памяти.

Чтобы убить зависший процесс, нажмите на него правой кнопкой мыши и выберите опцию Kill Process или нажмите кнопку Del.

Process Explorer

Если программа по-прежнему «висит», потребуется убить дерево процессов: выделите его и выберите опцию Kill Process Tree или нажмите сочетание клавиш Shift+Del.

Process Explorer

Подтвердите свое решение нажатием кнопки ОК. Проблема решена, теперь зависшая программа закрыта, можно запустить ее снова или продолжить работу без нее.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *