Tasklist как найти только один процесс

/V – выдает подробную информацию о процессе:

“Имя образа”,”PID”,”Имя сессии”,”№ сеанса”,”Память”,”Состояние”,”Пользователь”,”Время ЦП”,”Заголовок окна”

Сам не знал – оказывается иногда полезно писать FAQ :)

Здесь получаем дополнительно:

  • Заголовок окна
  • Время ЦП – это нечто, вроде общей затраченной процессором мощности на поддержание работы процесса.

Я от такого отчета (с сортировкой по полю “Время ЦП”) в вирусных темах не отказался бы.

/M – информация о том, функции из каких библиотек подгружены процессом*.
* для полной картины потребуется запуск Tasklist в режиме повышенных привилегий.

Можно задать фильтром интересующие,
например, можем узнать какие из процессов используют функции для подключения к сети Интернет, создания сокетов, передачи пакетов по лок. сети…:

tasklist /m urlmon.dll
tasklist /m winhttp.dll
tasklist /m wininet.dll
tasklist /m rasapi32.dll
tasklist /m ws2_32.dll
tasklist /m netapi32.dll

Urlmon svchost details

Детальную информацию об всех экпортируемых библиотеками API-функциях можно получить через утилиту dumpbin из состава Microsoft Visual Studio.
Например:

dumpbin.exe /exports c:windowssystem32ws2_32.dll

Похожую информацию (tasklist /m) о используемых процессом библиотеках можно получить, на запуская сам процесс:

dumpbin.exe /imports c:process.exe | find /i ".dll"

или без find, чтобы увидеть какие конкретно функции из библиотеки испольует.

Процессы удаленного компьютера:
/S <система> Подключаемый удаленный компьютер.
/U [<домен>]<пользователь> Пользовательский контекст, в котором должна выполняться эта команда.
/P [<пароль>] Пароль для этого пользовательского контекста. Запрашивает ввод пароля, если он не задан.

Встроенные фильтры:

Имя фильтра | Допустимые операторы | Допустимые значения
STATUS |eq, ne |RUNNING / NOT RESPONDING / UNKNOWN
IMAGENAME |eq, ne| Имя образа
PID |eq, ne, gt, lt, ge, le |Значение PID
SESSION |eq, ne, gt, lt, ge, le |Номер сессии
SESSIONNAME |eq, ne |Имя сессии
CPUTIME |eq, ne, gt, lt, ge, le |Время CPU в формате hh:mm:ss. hh – часы, mm – минуты, ss – секунды
MEMUSAGE |eq, ne, gt, lt, ge, le |Использование памяти в KБ
USERNAME |eq, ne |Имя пользователя в формате [<домен><пользователь>]
SERVICES |eq, ne |Имя службы
WINDOWTITLE |eq, ne |Название окна (допустима маска *)
MODULES |eq, ne |Имя DLL

Примечание: Фильтры “WINDOWTITLE” и “STATUS” не поддерживаются при опросе удаленного компьютера.

Например, показать зависшие процессы (в диспетчере задач “Не отвечает”):

tasklist /FI "STATUS eq NOT RESPONDING"

Можно задавать сразу несколько фильтров,
например, показать процессы, использующие от 1 МБ до 10 МБ памяти:

tasklist /FI "MEMUSAGE ge 1024" /FI "MEMUSAGE le 10240"

Расшифровка условных операторов:
eq (equal) = равняется / соответсвует
ne (not equal) != не равняется
gt (greater then) > больше, чем
lt (less then) < меньше, чем
ge (great or equal) >= больше или равно
le (less or equal) <= меньше или равно

  1. Home
  2. OS
  3. Windows
  4. Работа с процессами из командной строки в Windows, утилиты tasklist и taskkill

Поговорим о том, как найти и завершить (убить) приложение (процесс), используя встроенные утилиты командной строки tasklist и taskkill в ОС Windows. 

Процессом в windows называют экземпляр выполняемой программы.

Просмотр запущенных процессов.

Tasklist – консольная утилита для просмотра всех процессов, выводит имя образа, PID, имя сессии, номер сеанса и объем занимаемой памяти для каждого процесса. Запустить ее можно из командной строки windows.

Для запуска командной строки windows, переходим в пункт меню: Пуск –> Выполнить –> В строку вводим команду cmd.exe.

C:WindowsSystem32>tasklist

tasklist

Вывод команды tasklist.

Завершение работы процесса.

Taskkill – утилита для завершения работы процесса. Существует несколько вариантов для убийства процесса.

1. По номеру PID.

C:WindowsSystem32>taskkill /PID 6056

taskkill /PID

Вывод команды taskkill /PID 6056.

2. По имени.

WindowsSystem32>taskkill /IM calc.exe

taskkill /IM

Вывод команды taskkill /IM calc.exe.

Дополнительную информацию по применению этих команд  можно получить, используя справку.

C:>tasklist /?
C:>taskkill /?

Вот и все. Рассмотрение утилит tasklist и taskkill завершено. Может кому и пригодиться.

Меня два раза спрашивали [члены Парламента]: «Скажите на милость, мистер Бэббидж, что случится, если вы введёте в машину неверные цифры? Cможем ли мы получить правильный ответ?» Я не могу себе даже представить, какая путаница в голове может привести к подобному вопросу. / Charles Babbage /

The difficult thing with tasklist is its default output format. For example, when command line:

tasklist /FI "ImageName eq cmd.exe" /FI "Status eq Running"

is executed, we get:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
cmd.exe                      12740 Console                    1      3'328 K
cmd.exe                      11020 Console                    1      3'304 K

Unless the column widths are fixed, which I would not rely on, extracting the PID is not that trivial, because the image name could also have SPACEs in it, so using such as delimiters would not work.
A possible way was to count the number of =-signs in the second line up to the first SPACE, so we know the number of characters to truncate to have the image name removed, but this requires some kind of loop (using goto), so the performance might be quite bad.

However, there are other output formats available for tasklist. The command line:

tasklist /FI "ImageName eq cmd.exe" /FI "Status eq Running" /FO CSV

results in this output:

"Image Name","PID","Session Name","Session#","Mem Usage"
"cmd.exe","12740","Console","1","3'328 K"
"cmd.exe","11020","Console","1","3'304 K"

Now it is quite easy to extract the PID:

@echo off
for /F "delims=" %%R in ('
    tasklist /FI "ImageName eq cmd.exe" /FI "Status eq Running" /FO CSV /NH
') do (
    set "FLAG1=" & set "FLAG2="
    for %%C in (%%R) do (
        if defined FLAG1 (
            if not defined FLAG2 (
                echo %%~C
            )
            set "FLAG2=#"
        )
        set "FLAG1=#"
    )
)

Another output formats is used by the following command line:

tasklist /FI "ImageName eq cmd.exe" /FI "Status eq Running" /FO LIST

resulting in this output:

Image Name:   cmd.exe
PID:          12740
Session Name: Console
Session#:     1
Mem Usage:    3'328 K

Image Name:   cmd.exe
PID:          11020
Session Name: Console
Session#:     1
Mem Usage:    3'304 K

With this it is even simpler to get the desired output:

@echo off
for /F "tokens=2" %%K in ('
   tasklist /FI "ImageName eq cmd.exe" /FI "Status eq Running" /FO LIST ^| findstr /B "PID:"
') do (
   echo %%K
)

By the way, for the filter options /FI, there are the following operators available:

  • eq — equal to;
  • ne — not equal to;
  • gt — greater than;
  • lt — less than;
  • ge — greater than or equal to;
  • le — less than or equal to;

The Microsoft documentation as well as the help message (tasklist /?) do not explain their meaning, but I found the following external resources:

  • Managing Windows Programs from the Command Line: Tasklist
  • Microsoft DOS tasklist command

Иногда возникают ситуации, когда обычные средства управления операционной системой Windows дают сбои. Например, известный, пожалуй, каждому пользователю, “Диспетчер задач” вдруг отказывается запускаться. В этой ситуации можно воспользоваться консолью Windows (Пуск->Выполнить в поле “Открыть” набираем cmd и нажимаем кнопку “ОК”) Получаем чёрное окошко консоли с заголовком “С:Windowssystem32cmd.exe”, а внутри будет ссылка на профиль пользователя в ОС Windows, например “C:Documents and Settingsaeelistratov>”. Консольных команд достаточно много, и описать их в рамках одной статьи не представляется возможным. Сегодня речь пойдёт о двух командах, позволяющих управлять процессами, запущенными в системе Windows.

Первая команда – tasklist, запущенная без параметров  выводит в окно консоли список запущенных процессов в системе. Полный список параметров можно получить, запустив tasklist /? (параметры передаются через знак слеш “/”, опции задаются с помощью дефиса “-“).

В заголовке списка мы увидим поля: Имя образа, PID (ProcessID), Имя сессии (актуально при работе с удалённым компьютером), № сеанса (так же для удалённой работы), Память.

Имя образа – как правило, совпадает с именем исполняемого файла приложения, службы или процесса. Например, для блокнота имя образа будет Notepad.exe, а для MS WordWINWORD.exe.

PID – идентификационный номер процесса в системе, он позволяет идентифицировать конкретный процесс, а в нашем примере снять зависшую задачу, конкретную зависшую задачу, не заморачиваясь вводом имени образа.

Имя сессии и номер сеанса мы рассматривать не будем, т.к. для локальной системы имя сессии всегда будет “Console“, а номер сеанса равным нулю.

Память – это количество памяти, выделенной системой для того или иного процесса.

Итак, чтобы закрыть зависшее приложение (зная его название), мы даём команду tasklist, таким образом, узнаём идентификатор процесса (PID). Далее мы используем команду taskkill /PID <ID Процесса> или же команду taskkill /IM <Имя образа>

Варианты действий с парой команд tasklist и taskkill:

Вариант 1. Мы знаем,  какое приложение является причиной зависания системы:

Например, у нас намертво повис Word. Мы знаем, что называется он winword.exe. Завершить работу зависшего word’a мы можем двумя путями: используя  taskkill /PID <ID Процесса>, предварительно узнав ID процесса с помощью команды tasklist или же используя tasklist с параметром /IM: tasklist /IM  winword.exe.

Вариант 2. Мы не знаем, какое приложение является причиной зависания системы:

В этом варианте нам понадобятся полные сведения о процессах, запущенных в системе. Чтобы вывести полные сведения о процессах, необходимо задать параметр /V в команде tasklist. В таком варианте команда возвращает нам расширенную таблицу, с дополнительными сведениями о процессах. К пяти предыдущим колонкам добавляются ещё 4:

Статус – Имеет два возможных значения “Работает” и “Не отвечает”

Пользователь – Имя пользователя, запустившего процесс (Тут могут быть как системные пользователи вроде NT AUTHORITYSYSTEM , и пользователи <домен><имя пользователя>, пока на этом не будем останавливаться)

Время ЦП – отображает время, затраченное процессором на обработку данного процесса (своеобразный показатель нагрузки на процессор)

Заголовок окна – в заголовке окна приложения частенько выводится имя открытого документа, что позволяет идентифицировать процесс.

В расширенном списке нас интересуют два поля – это статус и заголовок окна. По этим двум полям мы можем точно определить, какое из запущенных приложений зависло, определив его имя (образа) и Идентификатор процесса (PID). Далее, как и в первом варианте с помощью команды taskkill мы закрываем зависшее приложение.

В чём разница между применением параметра /PID и /IM?

Когда мы снимаем процесс с помощью параметра /PID – мы даём команду, завершающую конкретный процесс по идентификатору. Когда мы используем параметр /IM – мы даём команду, завершающую ВСЕ процессы, с соответствующим именем образа.

Что ещё необходимо знать?

0. Любой инструмент требует бережного обращения.

1. Закрывая приложение, с помощью команды taskkill вы теряете все несохранённые данные приложения. А в случае применения параметра/IM – все не сохранённые данные всех копий приложения!

2. При закрытии процессов, относящихся к системным службам, Вы можете нарушить работу системы, что приведёт к её перезагрузке. Выяснить, какие процессы относятся к системным службам, можно дав команду tasklist /SVC.

Навскидку, системные процессы это svchost.exe, lsass.exe, services.exe, winlogon.exe, smss.exe, csrss.exe, spool.exe, FrameworkService.exe, их завершение может привести к перезагрузке системы и потере данных. Если Вам нужно остановить какую-либо службу, то лучше это делать через служебную консоль Windows или командой net stop, о которой пойдёт речь в одном из следующих ликбезов.

3. С помощью данных команд можно управлять процессами на удалённом компьютере в сети, но для этого у Вас должны быть соответствующие привилегии (права администратора), тогда через ключ /S можно указать имя удалённой системы. Например, tasklist /S somecomp – вернёт список процессов, запущенных на компьютере с сетевым именем somecomp, a taskkill /S somecomp /IM notepad.exe – принудительно закроет на удалённом компьютере все процессы блокнота.

In Windows, we can get the list of processes running on the system from command prompt also. We can use ‘tasklist‘ command for this purpose.
Using this command we can selectively list the processes based on criteria like the memory space used, running time, image file name, services running in the process etc. Below you can find the syntax and examples for various cases.

Get the list of all the process running on the system

tasklist

Get the list of process using memory space greater than certain value.

tasklist /fi "memusage gt memorysize"

Memory size should be specified in KB
For example, to get the list of processes occupying more than 30MB of memory, we can run the below command.

tasklist /fi "memusage gt 30000"

Find the list of processes launched by a user

tasklist /fi "username eq userName"

Find the memory usage of a specific process

tasklist /fi "pid eq processId"

Example:

c:>tasklist /fi "pid eq 6544"
Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
WmiPrvSE.exe                  6544 Services                   0      8,936 K

Find the list of not responding processes

tasklist /fi "status eq not responding"

example:

c:>tasklist /fi "status eq not responding"
Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
rundll32.exe                  3916 Console                    1      7,028 K

Get the list of services running in a process

tasklist /svc /fi "pid eq processId"

Example:

c:>tasklist /svc /fi "pid eq 624"
Image Name                     PID Services
========================= ======== ============================================
lsass.exe                      624 EFS, KeyIso, Netlogon, ProtectedStorage,
                                   SamSs, VaultSvc
c:>

Get list of processes running for more than certain time

tasklist /fi "cputime gt hh:mm:ss"

example:
Get the list of processes that have been running from more than an hour and 20 minutes.

c:>tasklist /fi "cputime gt 01:20:00"
Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0         24 K
SynTPEnh.exe                  4152 Console                    1      8,080 K
firefox.exe                   1740 Console                    1    857,536 K
c:>

Find processes that are running a specified image file:

tasklist /fi "imagename eq imageName"

Example:

c:>tasklist /fi "imagename eq firefox.exe"
Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
firefox.exe                   1740 Console                    1    812,160 K
c:>

Find the process running a specific service

tasklist /fi "services eq serviceName"

example:

c:>tasklist /fi "services eq webclient"

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
svchost.exe                   1052 Services                   0     20,204 K
c:>

Related Posts:
How to kill a process from windows command line.

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