Как сохранить список процессов для последующего анализа

Список запущенных процессов — это снимок состояния системы в конкретный момент. Он помогает диагностировать зависания, найти подозрительное ПО, оценить потребление памяти или сравнить поведение машины «до» и «после» изменений. Чтобы снимок был полезен для анализа, его нужно сохранить не просто глазами с экрана, а в файл подходящего формата. Ниже — рабочие способы для Windows и Linux, от быстрого текстового дампа до периодического сбора данных.

Зачем сохранять процессы именно в файл

Экранная утилита показывает состояние только сейчас. Если проблема возникает эпизодически — например, раз в несколько часов растёт память или появляется неизвестный процесс — без истории восстановить картину не получится. Файл со списком процессов решает три задачи:

  • Фиксация момента. Вы получаете доказуемый снимок: что было запущено, под каким пользователем, сколько ресурсов потребляло.
  • Сравнение во времени. Два и более снимка позволяют увидеть, какой процесс появился, исчез или начал расти.
  • Передача специалисту. Текстовый файл можно отправить в поддержку или коллеге без удалённого доступа к машине.

Важно понимать ограничение: список процессов — это не полный дамп системы. Он не содержит содержимое памяти, сетевой трафик или историю запусков. Для глубокой диагностики его дополняют журналами событий, данными мониторинга и при необходимости дампами отдельных процессов.

Windows: основные способы

Диспетчер задач — быстро, но ограниченно

Во вкладке «Подробности» диспетчера задач можно добавить нужные столбцы (правый клик по заголовку таблицы) и скопировать строки через контекстное меню. Это удобно для разовой фиксации, но формат копирования неудобен для автоматической обработки, а столбцы приходится настраивать вручную каждый раз.

Командная строка: tasklist

Классический способ — встроенная утилита tasklist. Она выводит имя образа, идентификатор процесса (PID), имя сессии, объём памяти:

tasklist /v > C:\logs\processes.txt

Ключ /v добавляет подробный режим (статус, пользователь, время работы ЦП), перенаправление > записывает результат в файл. Полезные варианты:

  • tasklist /svc — показывает службы внутри процессов svchost.exe; без этого сложно понять, какая именно служба нагружает систему.
  • tasklist /fo csv /v > processes.csv — вывод в формате CSV, который открывается в Excel и легко фильтруется.
  • tasklist /fi «memusage gt 200000» — фильтр по потреблению памяти (значение в килобайтах).

Для анализа в Excel CSV-формат предпочтительнее: столбцы разделяются автоматически, и можно сортировать по любому полю.

PowerShell: гибкость и структурированные данные

PowerShell даёт больше контроля над составом данных. Базовый вариант:

Get-Process | Export-Csv -Path C:\logs\processes.csv -NoTypeInformation -Encoding UTF8

Если нужны владелец процесса и путь к исполняемому файлу (это критично при поиске подозрительного ПО), используйте WMI/CIM:

Get-CimInstance Win32_Process | Select-Object ProcessId, Name, ExecutablePath, CommandLine | Export-Csv processes.csv -NoTypeInformation

Поле CommandLine особенно ценно: оно показывает, с какими аргументами запущен процесс. Один и тот же исполняемый файл может запускаться с разными параметрами, и без этой информации картина неполная.

wmic — устаревающий, но ещё встречающийся вариант

Утилита wmic долгое время была стандартом для таких выгрузок (wmic process get … /format:csv). В новых версиях Windows она постепенно удаляется из системы, поэтому для новых сценариев лучше опираться на PowerShell и CIM-командлеты. Если скрипт должен работать на старых машинах, предусмотрите оба варианта.

Linux: ps, top и их сохранение

Мгновенный снимок через ps

Утилита ps делает снимок текущего состояния. Наиболее информативная команда:

ps auxf > /tmp/processes.txt

Расшифровка ключей: a — все процессы всех пользователей, u — подробный формат с владельцем и потреблением ресурсов, x — включая процессы без терминала, f — дерево родительских связей. Дерево важно: оно показывает, кто кого породил, что помогает понять происхождение процесса.

Более машиночитаемый вариант с сортировкой по памяти:

ps -eo pid,user,%cpu,%mem,etime,cmd —sort=-%mem > processes.txt

Здесь явно задан набор столбцов: PID, пользователь, проценты CPU и памяти, время работы и полная командная строка.

Снимок top в один нажатие

В интерактивном top нажмите клавишу W, чтобы сохранить текущую конфигурацию, и используйте пакетный режим для записи в файл:

top -b -n 1 > snapshot.txt

Ключи означают: -b — пакетный режим без интерфейса, -n 1 — одна итерация. Если убрать единицу, top будет дописывать снимки каждые несколько секунд — это уже примитивный мониторинг.

Что ещё стоит захватить одновременно

  • free -m — общее состояние памяти, чтобы интерпретировать цифры процессов в контексте.
  • df -h — заполненность дисков; переполнение часто маскируется под другие проблемы.
  • uptime — средняя загрузка за минуты, полезна для сопоставления нескольких снимков.

Собирать эти данные лучше одним скриптом в один файл или в файлы с общей меткой времени — так проще сопоставлять.

Как организовать периодический сбор

Разовый снимок отвечает на вопрос «что происходит сейчас». Для эпизодических проблем нужен сбор по расписанию.

На Windows: планировщик задач

  1. Подготовьте PowerShell-скрипт, который добавляет строку с меткой времени и списком процессов в общий CSV-файл.
  2. Откройте планировщик задач и создайте задание с нужным интервалом (например, каждые 15 минут).
  3. В действии укажите запуск powershell.exe с параметром -File и путём к скрипту.
  4. Ограничьте срок хранения: настройте отдельную задачу очистки или ротацию файлов, иначе лог разрастётся.

Пример логики скрипта (условный): получить Get-Process, добавить поле Timestamp с текущей датой, дописать через Export-Csv -Append.

На Linux: cron

Добавьте в crontab строку вида «*/15 * * * * команда записи снимка в файл с датой в имени». Имя файла удобно формировать так, чтобы в него входили дата и час — например, через подстановку результата команды date. Это упрощает поиск нужного интервала при разборе инцидента.

Частота сбора — компромисс. Слишком редко — пропустите короткий всплеск нагрузки; слишком часто — получите большие файлы и собственную нагрузку на диск. Для большинства задач интервал от одной до пятнадцати минут достаточен; точнее подбирается по характеру проблемы.

Сравнение способов

Способ Платформа Формат Когда подходит
Диспетчер задач (копирование) Windows Текст Разовая ручная фиксация без подготовки
tasklist /v /fo csv Windows CSV Быстрый снимок с возможностью открыть в Excel
Get-Process / Get-CimInstance + Export-Csv Windows CSV Регулярный сбор, нужны путь и командная строка процесса
ps auxf Linux Текст Один снимок с деревом процессов
top -b -n 1 Linux Текст Снимок в привычном виде top, серия снимков при изменении -n
cron / планировщик + скрипт Обе Любой Поиск эпизодических проблем, накопление истории

Как анализировать сохранённые данные

Сам по себе файл — полуфабрикат. Польза появляется после разбора:

  • Сортировка по ресурсам. В CSV отсортируйте по памяти или CPU — самые тяжёлые процессы видны сразу.
  • Сравнение снимков. Откройте два файла рядом или объедините в одну таблицу с колонкой времени: появившиеся и исчезнувшие процессы часто указывают на причину проблемы.
  • Поиск аномалий пути. Системные процессы обычно лежат в стандартных каталогах. Исполняемый файл системного имени процесса из пользовательской папки — повод разобраться детальнее.
  • Группировка. Множество одноимённых процессов может быть нормой (браузер, пулы рабочих процессов) или признаком зациклившегося запуска — смотрите дерево родителей и время старта.

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

Типичные ошибки

  • Снимок без метки времени. Через неделю невозможно понять, к какому моменту относится файл. Всегда включайте дату и время — в имени файла или внутри данных.
  • Неполный набор столбцов. Список имён без PID, пользователя и командной строки часто оказывается бесполезным: нельзя отличить экземпляры друг от друга.
  • Кодировка. Кириллические имена пользователей и путей могут искажаться при неверной кодировке. В PowerShell указывайте UTF8 при экспорте.
  • Отсутствие ротации. Задание в планировщике без очистки за месяц-другой забьёт диск, особенно если снимки делаются каждую минуту.
  • Анализ одного снимка. Единственный файл показывает состояние, но не динамику. Если проблема плавающая, собирайте серию.

Практические рекомендации

Начните с простого: сделайте один снимок прямо сейчас удобной командой для вашей системы и посмотрите, хватает ли этих данных для ответа на ваш вопрос. Если задача разовая — этого достаточно. Если проблема повторяется — настройте сбор по расписанию с меткой времени и ротацией файлов, включив в выгрузку PID, пользователя, путь и командную строку. Перед разбором инцидента проверьте, что файлы читаются корректно (кодировка, разделители), и только потом делайте выводы: список процессов — сильный инструмент, но он отвечает лишь на вопрос «что выполнялось», а не «почему».

PEFile.ru