Как завершить процессы в командной строке - TASKKILL. Быстрое завершение зависших процессов на компьютере с помощью специального ярлыка Как завершить все процессы на компьютере
Представьте ситуацию: у вас есть программа, которая настолько нестабильно, что постоянно зависает. Иногда такие программы даже не дают компьютеру перезагрузиться, его работу приходится завершать аварийно - нажатием и долгим удержанием кнопки питания.
Прежде всего, стоит попробовать закрыть программу через стандартный диспетчер задач. Нажмите Alt+Ctrl+Del, во вкладке «Приложения» найдите зависшую программу и нажмите «Снять» задачу.
Если это не помогло, перейдите во вкладку «Процессы», найдите зависший процесс и нажмите «Завершить процесс». В большинстве случаев зависшая программа после этого закроется.
Там, где стандартный диспетчер задач не справляется, поможет более продвинутая программа - Process Explorer. Она выпущена сторонним разработчиком, но распространяется Microsoft, доступна бесплатно, не требует установки и работает на Windows XP, 7 и 8.
Зайдите на сайт Microsoft , скачайте архив Process Explorer, распакуйте его и запустите с правами администратора файл procexp.exe. Вы увидите список всех запущенных программ. Выполняемые ими процессы показаны в древовидной форме. Вполне вероятно, что закрытию проблемной программы диспетчером задач мешало то, что доступ к зависшему процессу блокировал процесс более высокой иерархии. В первом столбике показано, сколько процессорного времени потребляет каждый процесс. У зависшего это значение будет близко к ста процентам. Обнаружить зависшее приложение можно, отсортировав процессы по величине нагрузки на процессор или потребления оперативной памяти.
Чтобы убить зависший процесс, нажмите на него правой кнопкой мыши и выберите опцию Kill Process или нажмите кнопку Del.
Если программа по-прежнему «висит», потребуется убить дерево процессов: выделите его и выберите опцию Kill Process Tree или нажмите сочетание клавиш Shift+Del.
Вы наверняка знакомы с традиционным способом завершить процесс в Windows с помощью диспетчера задач. Этот способ эффективен, но способ с использованием командной строки дает больше контроля и возможность завершить несколько процессов за раз.
Возможность завершить процесс из командной строки дает нам команда TaskKill . Вы можете убить процесс из командной строки по его идентификатору (PID) или по имени образа (имени exe файла). Запустите консоль от имени администратора и введите команду tasklist , чтобы просмотреть все запущенные процессы.
C:\tasklist Имя образа PID Имя сессии № сеанса Память ========================= ======== ================ =========== ============ System Idle Process 0 Services 0 24 КБ System 4 Services 0 1 256 КБ conhost.exe 5944 Console 2 2 888 КБ notepad.exe 3100 Console 2 7 400 КБ tasklist.exe 8892 Console 2 6 100 КБ WmiPrvSE.exe 7340 Services 0 6 864 КБ smss.exe 372 Services 0 544 КБ csrss.exe 536 Services 0 3 336 КБ wininit.exe 812 Services 0 436 КБ
В приведенном выше примере можно увидеть имя образа и PID для каждого процесса. Если вы хотите убить процесс Notepad? то нужно ввести:
taskkill /IM notepad.exe /F
Флаг /F – нужен для принудительного завершения процесса. Если его не использовать, то в некоторых случаях ничего не произойдет, приложение продолжит свою работу. Как пример попытка завершения процесса explorer.exe без этого флага ни к чему не приведет.
Если у вас есть несколько экземпляров приложений, как например chrome, то выполнение команды taskkill /IM. chrome.exe завершит их все. При указании PID можно завершить только конкретные процессы Chrome.
В taskkill есть варианты фильтрации, которые позволяют использовать следующие переменные и операторы:
Переменные
- STATUS (статус)
- IMAGENAME (имя образа)
- PID (значение)
- SESSION (номер сессии)
- CPUTIME (время CPU)
- MEMUSAGE (использование памяти в кб)
- USERNAME (имя пользователя)
- MODULES (имя DLL)
- SERVICES (имя службы)
- WINDOWTITLE (заголовок окна)
Операторы
- eq (равно)
- ne (не равно)
- gt (больше чем)
- lt (меньше чем)
- ge (больше или равно)
- le (меньше или равно)
- * (любые символы)
Вы можете использовать переменные и операторы с флагом /FI.
Например, допустим вы хотите, завершить все процессы, у которых заголовок окна начинается с “Интернет”, то команда будет следующей:
taskkill /FI “WINDOWTITLE eq Internet*” /F
Чтобы завершить все процессы запущенные от имени Marina:
taskkill /FI “USERNAME eq Marina” /F
Таким же образом можно завершить процесс запущенный на другом компьютере из командной строки. Например имя компьютера OperatorPC, необходимо ввести:
taskkill /S OperatorPC /U Имя_пользователя_на_удаленной_машине /P Пароль_от_удаленной_машины /IM notepad.exe /F
Подробную информацию вы всегда можете получить запустив taskkill с ключом /?
Завершить процесс из командной строки
Операционная система Windows не без изъянов, как и программы, которые под нее выпускают разработчики. Конфликт приложения с операционной системой или «железом» компьютера приводит к тому, что оно зависает. Всем хорошо известно, что когда зависает процесс на Windows, следует нажать одновременно клавиши ctrl+alt+del, чтобы вызвать «Диспетчер задач», а после закрыть программу, которая не отвечает. Однако имеется куда более удобный способ, чтобы завершить зависший процесс на компьютере, или несколько процессов, если в том имеется необходимость.
Почему зависают процессы на компьютере?
Если приложение на компьютере зависло, произошло это из-за конфликтного состояния на уровне «железа» или программного обеспечения. Перезапуск программы часто помогает вернуть ее в работоспособное состояние, но он не устраняет саму причину зависания приложения, и это может повторить снова.
Можно выделить следующие основные причины зависания программ на Windows:
Выше перечислены самые распространенные причины, которые могут приводить к зависанию программ в Windows. Однако перед тем как устранять неисправность, необходимо закрыть зависший процесс или несколько процессов. Сделать это просто с помощью ярлыка, создание которого описано ниже.
«Убить» зависший процесс через «Диспетчер задач» - это способ, который работает в большинстве случаев, но не всегда. Именно поэтому мы рекомендуем всем создать на рабочем столе специальный ярлык, который позволит завершить зависший процесс в любом случае, когда доступен рабочий стол компьютера или «Панель задач», куда его так же можно поместить.
Ярлык для завершения всех зависших процессов создается следующим образом:
%windir%\system32\taskkill.exe /f /fi "status eq not responding"
После проделанных выше действий, на рабочем столе компьютера будет создан ярлык, активация которого приведет к закрытию всех зависших программ. Рекомендуем закрепить его в «Панель задач», поскольку часто зависшее приложение не позволяет «добраться» до «Диспетчера задач» и рабочего стола, но при этом не блокирует «Панель задач».
В данном видео мы рассмотрим команду 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, зависшей в статусе stopping (остановка)? Думаю, большинство администраторов Windows, встречалось с ситуациями, когда при попытке остановить (перезапустить) службу из графического интерфейса консоли управления службами (Services.msc), служба зависает намертво и висит в статусе 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 letter.
Завершение зависшей службы с помощью TaskKill
Наиболее простой способ завершить зависшую служу – воспользоваться утилитой taskkill . В первую очередь нужно определить PID (идентификатор процесса) нашей службы. В качестве примера возьмем службу Windows Update, ее системное имя wuauserv (имя можно посмотреть в свойствах службы в консоли services.msc).
Довольно часто эта проблема случается , особенно после установки обновлений на Windows Server 2012 R2 / 2008 R2.
Важно . Будьте внимательными. Принудительная отставка процесса критичных служб Windows может привести к BSOD или перезагрузке системы.
В командной строке с правами администратора (это важно, иначе будет ошибка 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 {$_.state -eq "stop pending"}
Завершить процесс для всех найденных служб поможет командлет 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.
Process Explorer: Завершение зависшего процесса из-под SYSTEM
Некоторые процессы, запущенные из-под SYSTEM, не может завершить даже локальный администратора сервера. Дело в том, что у него просто может не быть прав на некоторые процессы или службы. Чтобы завершить такие процесс (службы), вам необходимо предоставить локальной группе Administrators права на службу (процесс), а потом завершить их. Для этого нам понадобятся две утилиты: psexec.exe и ProcessExplorer (доступны на сайте Microsoft).