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

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
7,813
Реакции
6,592
Описание:
Отображает список процессов, которые исполняются в текущий момент
на локальном или удаленном компьютере.

По этой команде у нас проходил Конкурс - Batch TaskList* и 10$ (полезно к чтению)

Форматы вывода информации.
TASKLIST поддерживает вывод в 3 форматах:
  • Табличный (по-умолчанию):
Код:
tasklist
или
Код:
tasklist /FO Table
Вывод:
tasklist.exe 2944 Console 1 5 908 КБ
format_table.png

  • CSV
Код:
tasklist /FO CSV
Вывод:
"tasklist.exe","2240","Console","1","5 876 КБ"
format_csv.png

  • Списком:
Код:
tasklist /FO LIST
Вывод:
Имя образа: tasklist.exe
PID: 5112
Имя сессии: Console
№ сеанса: 1
Память: 5 904 КБ
tasklist_list.png


2-й и 3-й вариант не будут урезать в выводе имя файла до 25 символов.

Задача:
Узнать, выполняется ли процесс calc.exe (или другой) в системе:

Код:
tasklist /fo csv |>nul find /i "calc.exe" && echo OK - calc is Running.
/i - не учитывать регистр символов
&& - при успехе выполнения операции
>nul - не выводить на экран результат фильтрации

Также TASKLIST выводит шапку:
Имя образа PID Имя сессии № сеанса Память
========================= ======== ================ =========== ============
Вывод шапки можно отключить:
Код:
TASKLIST /nh
Полезные ключи:

/SVC - Отображение служб для каждого процесса.

Name|PID|Service
svchost.exe|980|DcomLaunch, PlugPlay, Power
nvvsvc.exe|324|nvsvc
svchost.exe|516|RpcEptMapper, RpcSs
svchost.exe|748|AudioSrv, Dhcp, eventlog,
|| HomeGroupProvider, lmhosts, wscsvc
svchost.exe|928|AudioEndpointBuilder, CscService, hidserv,
|| Netman, PcaSvc, SysMain, TrkWks, UxSms,
|| WPDBusEnum, wudfsvc
svchost.exe|1032|EventSystem, fdPHost, FontCache, netprofm,
|| nsi, WdiServiceHost
svchost.exe|1076|Appinfo, BITS, Browser, IKEEXT, iphlpsvc,
|| LanmanServer, MMCSS, ProfSvc, Schedule,
|| SENS, ShellHWDetection, Themes, Winmgmt,
|| wuauserv
 
Последнее редактирование:
/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.png


Детальную информацию об всех экпортируемых библиотеками API-функциях можно получить через утилиту dumpbin из состава Microsoft Visual Studio.
Например:
Код:
dumpbin.exe /exports c:\windows\system32\ws2_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) <= меньше или равно
 
Последнее редактирование:
Теперь о сессиях.
Что такое:
  • № (код) сеанса - 0, 1 ...
  • имя сессии - Console / Services
Session_Tasklist.png


Об этом нам неплохо поясняет Казакевич Олег.
Приведу его цитату о запуске служб в интерактивном режиме:
__________________
Если вкратце, суть вот в чем - службы выполняются в нулевой сессии.
На системах до Vista в этой же сессии выполняются процессы первого залогиненного пользователя.
Но такое соседство могло бы компрометировать безопасность, поэтому инженеры из Microsoft
сделали так, что службы в нулевой сессии работают в отдельной, неинтерактивной оконной станции,
изолированной от оконной станции пользователя и его рабочих столов.

А для тех, кому "ну очень надо" показать какой-нибудь диалог, сделали флажок "разрешить
взаимодействие с рабочим столом" в настройках службы. Когда этот флажок установлен, служба и
процессы пользователя выполняются в одной и той же оконной станции и служба может отображать
оконные сообщения и выполнять другие интерактивные операции. Понятно, что это работает только в
для первого залогиненного пользователя, в сессии 0, так как процессы других пользователей
выполняются в сессиях 1, 2 и так далее.

С выходом Windows Vista этому беспределу справедливо решили положить конец и сделали более
красиво - службам отдали нулевую сессию, а процессам пользователей сессии 1, 2, 3 и т.д.
Теперь флаг "разрешить взаимодействие с рабочим столом" потерял смысл, так как служба из
сессии 0 никак не может что-то показать на рабочем столе сессии 1. Но для старых приложений,
которые еще не успели адаптироваться к новому режиму, был сделан временный костыль под
названием "обнаружение интерактивных служб". Теперь при попытке службы, сконфигурированной с
этим флагом, показать какое-нибудь окошко, система выдает пользователю сообщение и перекидывает
его на отдельный десктоп, где и показывает сообщение службы.
__________________

Чтобы увидеть 0-ую сесию в "Диспетчере задач" для ОС >= Vista, следует нажать кнопку "Отображать процессы всех пользователей".
Session_taskmgr.png
 
Чтобы увидеть 0-ую сесию в "Диспетчере задач" для ОС >= Vista, следует нажать кнопку "Отображать процессы всех пользователей".
А программно, можно увидеть 0-ую сессию в win7? То есть используя язык программирования.
 
Alex1983, можно и без языка программирования.
Создаем службу с опцией "Разрешить интерактивное взаимодействие с рабочим столом".
Если процесс создаст окно в 0-й сессии, в ОС Vista и выше Вы можете перейти в эту сессию, нажав на кнопку во всплывающем окне (см. ниже).
 

Вложения

  • IMAG0068.jpg
    IMAG0068.jpg
    51.8 KB · Просмотры: 112
Последнее редактирование:
Ну и для полноты обзора рассмотрим еще одно средство для управления процессами из командной строки. Это утилиты Pslist и Pskill входящие в состав пакета PSTools от компании Sysinternals.

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

cmd12.gif

Pslist может выводить информацию о процессах по имени или ID, например командой pslist notepad -x выведем подробную информацию о нашем «многострадальном» блокноте.

cmd13.gif

Особенностью утилиты Pslist является режим task-manager. В этом режиме информация автоматически обновляется, причем можно задать время работы и интервал обновления. Запускается режим ключом -s , например командой tasklist -s -r 10 запускаем режим программу в режиме task-manager с обновлением раз в 10 сек.

cmd14.gif

Завершение процесса программой pskill предельно просто, вводим команду и имя (или ID) процесса и все.

cmd15.gif

Справку по утилитам Pslist и Pskill можно посмотреть, введя команду с ключом /?

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

По материалам: windowsnotes.ru​
 
Последнее редактирование:
Назад
Сверху Снизу