Windows кто запустил процесс

Обновлено: 05.07.2024

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

В настоящее время я собираюсь использовать метод пакетного файла для повторения каждые 15 секунд, убивая его, если он там есть. Тем не менее, я бы предпочел прекратить то, что запускает его.

Существуют ли способы для Windows 7, чтобы отслеживать, как процесс запускается?

3 ответа 3

Есть вещь, которая называется PPID (Parent Process ID), но ее довольно сложно найти в Windows, потому что это не столбец, показанный в диспетчере задач, и я даже не вижу его для столбцов в Process Explorer.

Два способа сделать это

Оба эти метода довольно быстрые

Метод 1 - WMIC

И это делает остальное довольно простым

Остальное довольно очевидно.

Итак, давайте предположим, что вы хотите найти, кто запустил calc.exe

и calc.exe вы видите из диспетчера задач, это PID 7384

WMIC показывает связь между PID и PPID. Затем найдите 10896 в диспетчере задач (10896 - это PPID, указанный для calc.exe PID 7384), и в диспетчере задач я вижу, что процесс с PID 10896 - это cmd.exe, который я использовал для запуска calc. exe И действительно, cmd.exe является родительским процессом, который породил calc.exe

Метод 2 - Монитор процесса

Вы можете сделать это в мониторе процессов sysinternals.

нажмите filter..filter в строке меню и добавьте фильтр, фильтрующий имя или путь или PID процесса, например, имя процесса calc.exe или фильтр для пути, и введите c:\windows\system32\calc.exe

Я случайно использовал имя процесса


Сделайте ОК .. и файл .. захват, если он еще не захватывает.

Дважды щелкните нужный процесс, поэтому в этом случае загрузите образ calc.exe и откроется диалоговое окно свойств, перейдите на правильную вкладку «процесс», и вы увидите PID и PPID(идентификатор родительского процесса).


И, конечно, когда вы знаете PPID, как сейчас, вы можете найти его в диспетчере задач, чтобы узнать, какой процесс его породил.

Если бы это был процесс, который выполнялся в фоновом режиме, я бы, вероятно, использовал бы Process Explorer или подходы wmic процессов, описанные Barlop или Robert Koritnik . Если процесс временный и запускается / завершается очень быстро, а времени для выполнения необходимых щелчков и нажатий клавиш не хватает, я бы использовал Process Monitor, как указано в nixda.

Я немного опоздал на эту вечеринку, но ради завершения:

Другой альтернативой этому (если по какой-либо причине вы не хотите использовать Process Monitor) является использование встроенного отслеживания процессов. Это можно включить, перейдя в:

Панель управления -> Администрирование -> Локальная политика безопасности -> Локальные политики -> Политика аудита Если административных средств нет в вашей панели управления, можно еще одним способом открыть локальную политику безопасности, нажав кнопку «Пуск» и введя secpol.msc.

Вы должны увидеть несколько вариантов аудита, включая отслеживание процессов аудита. Включите это для категории успеха.


Теперь в « Просмотр событий» -> «Журналы Windows -> Безопасность» вы увидите событие для "создания процесса"(это идентификатор события 4688), а также имя / путь создаваемого процесса, а также поле с именем « Идентификатор процесса создателя». Он содержит шестнадцатеричное представление PID процесса, который создал этот процесс (вы можете легко преобразовать его, используя calc.exe в представлении Programmer ).


Несколько возможных предложений, чтобы попробовать (в случайном порядке), некоторые из которых могут не дать выполнимых результатов или ваши уже пробовали. Я не пробовал это сам, поэтому я просто делюсь идеями, которые могут пропустить другие. Мозговой . Имейте в виду, что большинство моих предложений направлены на смягчение проблем, а не на их устранение. это так называемые отчаянные меры или план Z.

1. Информация о командной строке в диспетчере задач

Вы проверили столбец команд в диспетчере задач, предоставляет ли он эту информацию? Я полагаю, вы уже пробовали это.

2. Информация о процессе в Process Explorer

Если команда пуста, я попробую Process Explorer из SysInternals и посмотрю, получу ли я больше информации об этом конкретном процессе.

3. Приостановка процесса

Какой-то неизвестный процесс, который запускает его, скорее всего, проверяет процессы (по имени) и, если видит, что его там нет, запускает его. Если вы сделаете паузу, он будет существовать, поэтому этот процесс инициализации может не породить новый экземпляр.

Это может привести к сбою, если в процессе инициализации используются другие средства обнаружения процесса (межпроцессное взаимодействие), но этот тип обнаружения процесса сложнее разработать, поэтому выигрывает более легкая опция.

4. Пользовательская программа

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

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

Если вы действительно хороши в низкоуровневой разработке ОС, вы можете написать второй процесс, чтобы также проверить, кто его запустил, если это возможно. Я не уверен, но Windows API должен предоставить такую информацию. Это поможет вам понять суть проблемы.

5. Диспетчер задач

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

Windows 10 является многопользовательской системой, и означает это не только возможность создания в ней нескольких пользовательских профилей, но также и возможность одновременного запуска приложений. Примером тому являются системные службы, работающие под своей особой учетной записью с наивысшими правами, также в Windows могут запускаться на выполнение созданные администратором в планировщике заданий задачи.

А вот и другой пример. Если на компьютере имеется как минимум две активные учетные записи, то, находясь в одной учетке, можно запустить программу от имени другой прямо из контекстного меню Проводника. Для этого при клике ПКМ по ярлыку приложения нужно зажать клавишу Shift и выбрать в меню опцию запуска от имени другого пользователя. Как узнать, какой именно пользователь запустил тот или иной процесс? Есть два способа это сделать: с помощью Диспетчера задач и с помощью командной строки.

Первый способ самый простой. Откройте Диспетчер задач, переключитесь на вкладку «Подробности», найдите интересующий вас процесс и посмотрите связанное с ним имя пользователя в одноименной колонке слева.

Подробности

Перейти к нужному процессу на вкладке «Подробно» можно также из основной вкладки «Процессы», если кликнуть по нему правой кнопкой мыши и выбрать «Подробно».

Процессы

Способ с командной строкой столь же прост, но не столь же удобен.

Запустите консоль CMD от имени администратора и выполните в ней команду tasklist /V | more .

CMD - tasklist /V | more

При этом вы получите структурированный список всех работающих в системе процессов. Крайняя справа колонка как раз будет содержать полное имя пользователя, запустившего тот или иной процесс. Например, имя учетной записи, запустившей системные процессы будет выглядеть как NT AUTHORITY/СИСТЕМА , а процессы, запущенные встроенным администратором и прочими пользователями как Имя_Компьютера/Имя_пользователя .

Работа операционной системы Windows основана на работе процессов. В этой статье разберём что такое Windows процессы, их свойства, состояния и другое.

Процессы

Процесс стоит воспринимать как контейнер с набором ресурсов для выполнения программы. То есть запускаем мы программу, для неё выделяется часть ресурсов компьютера и эта программа работает с этими ресурсами.

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

Windows процессы состоят из следующего:

  • Закрытое виртуальное адресное пространство, то есть выделенная для процесса часть оперативной памяти, которая называется виртуальной.
  • Исполняемая программа выполняя свой код, помещает его в виртуальную память.
  • Список открытых дескрипторов. Процесс может открывать или создавать объекты, например файлы или другие процессы. Эти объекты нумеруются, и их номера называют дескрипторами. Ссылаться на объект по дескриптору быстрее, чем по имени.
  • Контекст безопасности. Сюда входит пользователь процесса, группа, привилегии, сеанс и другое.
  • Идентификатор процесса, то есть его уникальный номер.
  • Программный поток (как минимум один или несколько). Чтобы процесс хоть что-то делал, в нем должен существовать программный поток. Если потока нет, значит что-то пошло не так, возможно процесс не смог корректно завершиться, или стартовать.

У процессов есть еще очень много свойств которые вы можете посмотреть в “Диспетчере задач” или “Process Explorer“.

Процесс может быть в различных состояниях:

В Windows существуют процессы трёх типов:

  • Приложения. Процессы запущенных приложений. У таких приложений есть окно на рабочем столе, которое вы можете свернуть, развернуть или закрыть.
  • Фоновые процессы. Такие процессы работают в фоне и не имеют окна. Некоторые процессы приложений становятся фоновыми, когда вы сворачиваете их в трей.
  • Процессы Windows. Процессы самой операционной системы, например “Диспетчер печати” или “Проводник”.

Дерево процессов

В Windows процессы знают только своих родителей, а более древних предков не знают.

Например у нас есть такое дерево процессов:

Если мы завершим дерево процессов “Процесс_1“, то завершатся все процессы. Потому что “Процесс_1” знает про “Процесс_2“, а “Процесс_2” знает про “Процесс_3“.

Если мы вначале завершим “Процесс_2“, а затем завершаем дерево процессов “Процесс_1“, то завершится только “Процесс_1“, так как между “Процесс_1” и “Процесс_3” не останется связи.

Например, запустите командную строку и выполните команду title parrent чтобы изменить заголовок окна и start cmd чтобы запустить второе окно командной строки:

Измените заголовок второго окна на child и из него запустите программу paint:

В окне командной строке child введите команду exit, окно закроется а paint продолжит работать:

После этого на рабочем столе останутся два приложения, командная строка parrent и paint. При этом parrent будет являться как бы дедом для paint.

Запустите “Диспетчер задач”, на вкладке “Процессы” найдите процесс “Обработчик команд Windows”, разверните список и найдите “parrent“. Затем нажмите на нём правой копкой мыши и выберите “Подробно”:

Подробности по процессу parrent

Вы переключитесь на вкладку “Подробно” с выделенным процессом “cmd.exe“. Нажмите правой кнопкой по этому процессу и выберите «Завершить дерево процессов»:

Завершаем дерево процессов в диспетчере задач

Окно командной строки Parrent завершится а Paint останется работать. Так мы убедились что связи между первым процессом и его внуком нет, если у внука нет непосредственного родителя.

Потоки

На центральном процессоре обрабатываются не сами процессы, а программные потоки. Каждый поток, это код загруженный программой. Программа может работать в одном потоке или создавать несколько. Если программа работает в несколько потоков, то она может выполняться на разных ядрах процессора. Посмотреть на потоки можно с помощью программы Process Explorer.

  • два стека: для режима ядра и для пользовательского режима;
  • локальную памятью потока (TLS, Thread-Local Storage);
  • уникальный идентификатор потока (TID, Thread ID).

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

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

Волокна и планирование пользовательского режима

Потоки выполняются на центральном процессоре, а за их переключение отвечает планировщик ядра. В связи с тем что такое переключение это затратная операция. В Windows придумали два механизма для сокращения таких затрат: волокна (fibers) и планирование пользовательского режима (UMS, User Mode Scheduling).

Во-первых, поток с помощью специальной функции может превратится в волокно, затем это волокно может породить другие волокна, таким образом образуется группа волокон. Волокна не видимы для ядра и не обращаются к планировщику. Вместо этого они сами договариваются в какой последовательности они будут обращаться к процессору. Но волокна плохо реализованы в Windows, большинство библиотек ничего не знает о существовании волокон. Поэтому волокна могут обрабатываться как потоки и начнутся различные сбои в программе если она использует такие библиотеки.

Потоки UMS (User Mode Scheduling), доступные только в 64-разрядных версиях Windows, предоставляют все основные преимущества волокон при минимуме их недостатков. Потоки UMS обладают собственным состоянием ядра, поэтому они «видимы» для ядра, что позволяет нескольким потокам UMS совместно использовать процессор и конкурировать за него. Работает это следующим образом:

  • Когда двум и более потокам UMS требуется выполнить работу в пользовательском режиме, они сами могут периодически уступать управление другому потоку в пользовательском режиме, не обращаясь к планировщику. Ядро при этом думает что продолжает работать один поток.
  • Когда потоку UMS все таки нужно обратиться к ядру, он переключается на специально выделенный поток режима ядра.

Задания

Задания Windows (Job) позволяют объединить несколько процессов в одну группу. Затем можно этой группой управлять:

  • устанавливать лимиты (на память или процессорное время) для группы процессов входящих в задание;
  • останавливать, приостанавливать, запускать такую группу процессов.

Посмотреть на задания можно с помощью Process Explorer.

Диспетчер задач

Чаще всего для получения информации о процессе мы используем «Диспетчер задач». Запустить его можно разными способами:

  • комбинацией клавиш Ctrl+Shift+Esc;
  • щелчком правой кнопкой мыши на панели задач и выборе «Диспетчер задач»;
  • нажатием клавиш Ctrl+Alt+Del и выборе «Диспетчер задач»;
  • запуском исполняемого файла C:\Windows\system32\Taskmgr.exe.

При первом запуске диспетчера задач он запускается в кратком режиме, при этом видны только процессы имеющие видимое окно. При нажатие на кнопку «Подробнее» откроется полный режим:

Краткий режим Диспетчера задач

В полном режиме на вкладке «Процессы» виден список процессов и информация по ним. Чтобы получить больше информации можно нажать правой кнопкой мышки на заголовке и добавить столбцы:

Диспетчер задач - Добавление столбцов с информацией

Чтобы получить еще больше информации можно нажать правой кнопкой мышки на процессе и выбрать «Подробно». При этом вы переключитесь на вкладку «Подробности» и этот процесс выделится.

На вкладке «Подробности» можно получить ещё больше информации о процессе. А также здесь также можно добавить колонки с дополнительной информацией, для этого нужно щелкнуть правой кнопкой мыши по заголовку и нажать «Выбрать столбцы»:

Выбор столбцов с информацией о процессах на вкладке «Подробности»

Process Explorer

Установка и подготовка к работе

Более подробную информацию о процессах и потоках можно получить с помощью программы Process Explorer из пакета Sysinternals. Его нужно скачать и запустить.

Некоторые возможности Process Explorer:

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

    Запустите Process Explorer:

    Process Explorer

    Предупреждение о не настроенных символических именах

    Для начала скачиваем установщик «Пакет SDK для Windows 10».

    Устанавливать все не нужно, достаточно при установки выбрать “Debugging Tools for Windows“:

    Установка SDK для Windows 10

    Для настройки символических имен перейдите в меню Options / Configure / Symbols. Введите путь к библиотеке Dbghelp.dll, которая находится внутри установленного «Пакета SDK для Windows 10» по умолчанию:

    • C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\Dbghelp.dll.

    И путь к серверу символической информации:

    Некоторые основные настройки Process Explorer:

    • Смена цветового выделения – Options / Configure Colors.
    • Выбор колонок с информацией о процессах – View / Select Columns.
    • Сортировка процессов – нужно щелкнуть на заголовке столбца Process, при первом щелчке сортировка будет в алфавитном порядке, при втором в обратном порядке, при третьем вернется в вид дерева.
    • Просмотр только своих процессов – View / снять галочку Show Processes from All Users.
    • Настройка времени выделения только что запущенных процессов и завершённых – Options / Difference Highlight Duration / введите количество секунд.
    • Чтобы исследователь процесс подробнее можно дважды щелкнуть на нем и посмотреть информацию на различных вкладках.
    • Открыть нижнюю панель для просмотра открытых дескрипторов или библиотек – Vies / Show Lower Panel.

    Потоки в Process Explorer

    Потоки отдельного процесса можно увидеть в программе Process Explorer. Для этого нужно дважды кликнуть по процессу и в открывшемся окне перейти на вкладку «Threads»:

    Process Explorer (потоки процесса)

    В колонках видна информация по каждому потоку:

    • TID — идентификатор потока.
    • CPU — загрузка процессора.
    • Cycles Delta — общее количество циклов процессора, которое этот процесс использовал с момента последнего обновления работы Process Explorer. Скорость обновления программы можно настроить, указав например 5 минут.
    • Suspend Count — количество приостановок потока.
    • Service — название службы.
    • Start Address — начальный адрес процедуры, который начинает выполнение нового потока. Выводится в формате:«модуль!функция».

    При выделении потока, снизу показана следующую информация:

    • Идентификатор потока.
    • Время начала работы потока.
    • Состояние потока.
    • Время выполнения в режиме ядра и в пользовательском режиме.
    • Счетчик переключения контекста для центрального процессора.
    • Количество циклов процессора.
    • Базовый приоритет.
    • Динамический приоритет (текущий).
    • Приоритет ввода / вывода.
    • Приоритет памяти.
    • Идеальный процессор (предпочтительный процессор).

    Есть также кнопки:

    Задания в Process Explorer

    Process Explorer может выделить процессы, управляемые заданиями. Чтобы включить такое выделение откройте меню «Options» и выберите команду «Configure Colors», далее поставьте галочку «Jobs»:

    Process Explorer — выделение заданий

    Более того, страницы свойств таких процессов содержат дополнительную вкладку Job с информацией о самом объекте задания. Например приложение Skype работает со своими процессами как за заданием:

    Process Explorer — вкладка Job

    Запустите командную строку и введите команду:

    Таким образом вы запустите еще одну командную строку от имени этого пользователя. Служба Windows, которая выполняет команды runas, создает безымянное задание, чтобы во время выхода из системы завершить процессы из задания.

    В новой командной строке запустите блокнот:

    Далее запускаем Process Explorer и находим такое дерево процессов:

    Устройство Windows. Задания, изображение №3

    Как видим, процесс cmd и notepad это процессы связанные с каким-то заданием. Если дважды кликнуть по любому из этих процессов и перейти на вкладку Job, то мы увидим следующее:

    Напечатать страницу

    Когда в системе что-то не так или просто хочется проконтролировать эффективность установленного на компьютере антивируса, мы обычно нажимаем три заветные клавиши Ctrl, Alt, Del и запускаем Диспетчер задач, надеясь обнаружить вирус в списке процессов. Но в нем мы видим лишь большое количество работающих на компьютере программ, каждая из которых представлена своим процессом. И где же тут скрывается вирус? Ответить на этот вопрос вам поможет наша сегодняшняя статья

    Для того чтобы определить, есть вирус в процессах или его там нет, нужно очень внимательно вглядеться в список процессов. В операционной системе Windows Vista в обязательном порядке нажмите кнопочку «Отображать процессы всех пользователей», иначе вы толком ничего и не увидите. Прежде всего, обратите внимание на описание процесса в столбике «Описание». Если описания нет или оно какое-то «корявенькое», это должно вас насторожить. Ведь разработчики программ имеют привычку подписывать свои творения на понятном русском или английском языках.
    Отметив взглядом процессы с подозрительным описанием, обращаем взор на следующий столбик – «Пользователь». Вирусы обычно запускаются от имени пользователя, реже в виде служб и от имени системы - SYSTEM, LOCAL SERVICE или NETWORK SERVICE.

    Как найти вирус в списке процессов Windows

    Итак, найдя процесс с подозрительным описанием, запускаемый от имени пользователя или непонятно от чьего имени, щелкните нему правой кнопкой мышки и в появившемся контекстном меню выберите пункт «Свойства». Откроется окошко со свойствами программы, которая запустила данный процесс. Особое внимание обратите на вкладку «Подробно», где указана информация о разработчике, версии файла и его описание, а также на пункт «Размещение» вкладки «Общие» - здесь указан путь к запущенной программе.

    Как найти вирус в списке процессов Windows

    Как найти вирус в списке процессов Windows

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

    Как найти вирус в списке процессов Windows

    Таким образом, нет нужды копаться в свойствах файла, запустившего процесс – всё и так, как на ладони. Тем не менее, это не мешает щелкнуть по подозрительному процессу правой кнопкой мышки и выбрать «Свойства», чтобы получить доскональные сведения о файле процесса в отдельном окошке.

    Как найти вирус в списке процессов Windows

    Чтобы попасть в папку программы, который принадлежит процесс, щелкните по названию процесса правой кнопкой мыши и выберите «Проводник в папку процесса».

    Как найти вирус в списке процессов Windows

    Но самая удобная опция в Starter – возможность начать поиск информации о процессе прямо из окна программы. Для этого щелкните правой кнопкой мышки по процессу и выберите «Искать в Интернет».

    Как найти вирус в списке процессов Windows

    После того, как вы получите полную информацию о файле, запустившем процесс, его разработчике, назначении и мнение о процессе в сети интернет, сможете достаточно точно определить – вирус перед вами или мирная программа-трудяга. Здесь действует тот же принцип, что и в Диспетчере задач. Подозрительны те процессы и модули процессов, для которых не указан разработчик, в описании которых ничего нет либо написано что-то невнятное, процесс или задействованные им модули запускаются из подозрительной папки. Например, Temp, Temporary Internet Files или из папки в Program Files, но вы точно помните, что указанную там программу вы не устанавливали. И, наконец, если в интернете четко сказано, что данный процесс принадлежит вирусу, радуйтесь – зловреду не удалось спрятаться от вас!

    Одно из самых распространенных заблуждений начинающих чайников касается процесса svchost.exe. Пишется он именно так и никак иначе: svshost.exe, scvhost.exe, cvshost.exe и другие вариации на эту тему – вирусы, маскирующиеся под хороший процесс, который, кстати, принадлежит службам Windows. Точнее, один процесс svchost.exe может запускать сразу несколько системных служб. Поскольку служб у операционной системы много и все они нужны ей, процессов svchost.exe тоже много.

    В Windows XP процессов svchost.exe должно быть не более шести. Пять процессов svchost.exe – нормально, а вот уже семь – стопроцентная гарантия, что на вашем компьютере поселился зловред. В Windows Vista процессов svchost.exe больше шести. У меня, к примеру, их четырнадцать. Но и системных служб в Windows Vista намного больше, чем в предыдущей версии этой ОС.

    Process Explorer выдаст вам описание процесса, запустившую его программу, наименование разработчика и множество полезной технической информации, понятной разве что программистам.

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

    Как найти вирус в списке процессов Windows

    А для svchost.exe Process Explorer покажет полный перечень служб, относящихся к выделенному процессу. Один процесс svchost.exe может запускать несколько служб или всего одну.

    Как найти вирус в списке процессов Windows

    Как найти вирус в списке процессов Windows

    Чтобы увидеть свойства файла, запустившего процесс, щелкните по интересующему вас процессу правой кнопкой мышки и выберите «Properties» («Свойства»).

    Как найти вирус в списке процессов Windows

    Для поиска информации о процессе в интернете при помощи поисковой системы Google, просто щелкните по названию процесса правой кнопкой мыши и выберите «Google».

    Как найти вирус в списке процессов Windows

    Как и ранее, подозрения должны вызвать процессы без описания, без наименования разработчика, запускающиеся из временных папок (Temp, Temporary Internet Files) или из папки программы, которую вы не устанавливали, а также идентифицируемые в интернете как вирусы.

    И помните, для качественно работы программ Process Explorer и Starter в Windows Vista, их нужно запускать с административными правами: щелкните по исполняемому файлу программы правой кнопкой мышки и выберите «Запуск от имени администратора».

    Читайте также: