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

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем Dragokas, 30 дек 2013.

  1. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.307
    Описание:
    Отображает список процессов, которые исполняются в текущий момент
    на локальном или удаленном компьютере.

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

    Форматы вывода информации.
    TASKLIST поддерживает вывод в 3 форматах:
    • Табличный (по-умолчанию):
    Код (Text):
    tasklist
    или
    Код (Text):
    tasklist /FO Table
    Вывод:
    format_table.png
    • CSV
    Код (Text):
    tasklist /FO CSV
    Вывод:
    format_csv.png
    • Списком:
    Код (Text):
    tasklist /FO LIST
    Вывод:
    tasklist_list.png

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

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

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

    Также TASKLIST выводит шапку:
    Вывод шапки можно отключить:
    Код (Text):
    TASKLIST /nh
    --- Объединённое сообщение, 30 дек 2013, Дата первоначального сообщения: 30 дек 2013 ---
    Полезные ключи:

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

    Name PID Service
    1 svchost.exe 980 DcomLaunch, PlugPlay, Power
    2 nvvsvc.exe 324 nvsvc
    3 svchost.exe 516 RpcEptMapper, RpcSs
    4 svchost.exe 748 AudioSrv, Dhcp, eventlog,
    5 HomeGroupProvider, lmhosts, wscsvc
    6 svchost.exe 928 AudioEndpointBuilder, CscService, hidserv,
    7 Netman, PcaSvc, SysMain, TrkWks, UxSms,
    8 WPDBusEnum, wudfsvc
    9 svchost.exe 1032 EventSystem, fdPHost, FontCache, netprofm,
    10 nsi, WdiServiceHost
    11 svchost.exe 1076 Appinfo, BITS, Browser, IKEEXT, iphlpsvc,
    12 LanmanServer, MMCSS, ProfSvc, Schedule,
    13 SENS, ShellHWDetection, Themes, Winmgmt,
    14 wuauserv
     
    Последнее редактирование: 30 дек 2013
    Legion107, Phoenix и Kиpилл нравится это.
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.307
    /V - выдает подробную информацию о процессе:
    Сам не знал - оказывается иногда полезно писать FAQ :)

    Здесь получаем дополнительно:
    • Заголовок окна
    • Время ЦП - это нечто, вроде общей затраченной процессором мощности на поддержание работы процесса.
    Я от такого отчета (с сортировкой по полю "Время ЦП") в вирусных темах не отказался бы.

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

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

    Код (Text):
    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.
    Например:
    Код (Text):
    dumpbin.exe /exports c:\windows\system32\ws2_32.dll
    Похожую информацию (tasklist /m) о используемых процессом библиотеках можно получить, на запуская сам процесс:
    Код (Text):
    dumpbin.exe /imports c:\process.exe | find /i ".dll"
    или без find, чтобы увидеть какие конкретно функции из библиотеки испольует.

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

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


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

    Например, показать зависшие процессы (в диспетчере задач "Не отвечает"):
    Код (Text):
    tasklist /FI "STATUS eq NOT RESPONDING"
    Можно задавать сразу несколько фильтров,
    например, показать процессы, использующие от 1 МБ до 10 МБ памяти:
    Код (Text):
    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) <= меньше или равно
     
    Последнее редактирование: 30 дек 2013
    tzrb, Legion107, Arbitr и 4 другим нравится это.
  3. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.307
    Теперь о сессиях.
    Что такое:
    • № (код) сеанса - 0, 1 ...
    • имя сессии - Console / Services
    Session_Tasklist.png

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

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

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

    Чтобы увидеть 0-ую сесию в "Диспетчере задач" для ОС >= Vista, следует нажать кнопку "Отображать процессы всех пользователей".
    Session_taskmgr.png
     
    Alex1983, Legion107, orderman и 2 другим нравится это.
  4. Alex1983
    Оффлайн

    Alex1983 Разработчик

    Сообщения:
    848
    Симпатии:
    523
    А программно, можно увидеть 0-ую сессию в win7? То есть используя язык программирования.
     
    Kиpилл нравится это.
  5. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.307
    Alex1983, можно и без языка программирования.
    Создаем службу с опцией "Разрешить интерактивное взаимодействие с рабочим столом".
    Если процесс создаст окно в 0-й сессии, в ОС Vista и выше Вы можете перейти в эту сессию, нажав на кнопку во всплывающем окне (см. ниже).
     

    Вложения:

    • IMAG0068.jpg
      IMAG0068.jpg
      Размер файла:
      58 КБ
      Просмотров:
      5
    Последнее редактирование: 20 фев 2014
  6. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.307
    Ну и для полноты обзора рассмотрим еще одно средство для управления процессами из командной строки. Это утилиты 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​
     
    Последнее редактирование: 20 фев 2014
    tzrb, Sandor и Kиpилл нравится это.

Поделиться этой страницей