Как узнать родительский процесс windows

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

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

Использование Process Explorer

Process Explorer — отличная программа, которая расскажет вам все, что вы хотите знать о запущенных процессах. Скачайте Process Explorer, разархивируйте и запустите исполняемый файл.

$config[ads_text6] not found

В целях иллюстрации я запускаю инструмент информации о системе (msinfo32.exe) на вкладке «Инструменты» утилиты настройки системы (MSConfig.exe).

В Process Explorer нажмите CTRL + T, чтобы переключиться в режим просмотра дерева (вид по умолчанию), как показано ниже. Это представление показывает список процессов, запущенных родительским процессом.

Рис 2: процесс msinfo32.exe, созданный msconfig.exe

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

Использование Process Monitor

Process Monitor — еще один потрясающий инструмент от Windows SysInternals, который показывает, что работает в режиме реального времени. Он может отслеживать процессы, файловую систему, реестр и сетевую активность в режиме реального времени, а также имеет другие полезные функции. Загрузите Process Monitor и запустите его.

Нажмите кнопку «Процесс и активность потока» и отключите все остальные кнопки. Нажмите CTRL + E, чтобы начать захват (действует как переключатель)

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

Там вы можете увидеть процесс запуска msconfig.exe msinfo.exe.

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

Удачного Вычисления!

Возможно, вы сталкивались с ситуациями, когда жесткий диск постоянно активен, хотя ваша система находится в состоянии ожидания. Если вы откроете Диспетчер задач из любопытства, вы можете обнаружить, что несколько процессов запускаются и завершаются сами по себе, а вы ничего не делаете. Это может быть запланированное задание резервного копирования, сторонняя программа обслуживания системы или что-то еще, что может мешать вашему жесткому диску. Это может быть даже вредоносное ПО. Но какое приложение или процесс их запускает?if(typeof __ez_fad_position!=’undefined’){__ez_fad_position(‘div-gpt-ad-winhelponline_com-medrectangle-3-0’)};

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

Использование Process Explorer

Process Explorer — отличная программа, которая сообщает вам все, что вы хотите знать о запущенных процессах. Загрузите Process Explorer, разархивируйте и запустите исполняемый файл.

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

if(typeof __ez_fad_position!=’undefined’){__ez_fad_position(‘div-gpt-ad-winhelponline_com-box-4-0’)};

В Process Explorer нажмите CTRL + T, чтобы переключиться в представление в виде дерева (представление по умолчанию), как показано ниже. Это представление показывает список процессов, запущенных родительским процессом.


Рис 2: процесс msinfo32.exe, созданный msconfig.exe

Другой вариант — дважды щелкнуть процесс, и это покажет «Родительский» процесс и его идентификатор процесса.

Использование Process Monitor

Process Monitor — еще один потрясающий инструмент от Windows SysInternals, который в режиме реального времени показывает, что происходит под капотом. Он может отслеживать процессы, файловую систему, реестр и сетевую активность в режиме реального времени, а также имеет другие полезные функции. Скачайте Process Monitor и запустите его.

Нажмите кнопку «Процесс и активность потока» и отключите все остальные кнопки. Нажмите CTRL + E, чтобы начать захват (действует как переключатель)

if(typeof __ez_fad_position!=’undefined’){__ez_fad_position(‘div-gpt-ad-winhelponline_com-banner-1-0’)};

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

Здесь вы можете увидеть, как процесс msconfig.exe запускает msinfo.exe.

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

Удачных вычислений!

Problem

Given a process ID & command-line access on a remote Windows host, how can you find its parent’s PID?

Solution

Given Marc B’s answer, we can use WMIC (Command samples here) and do something like this:

wmic process where (processid=PROCID_HERE) get parentprocessid

golimar's user avatar

golimar

2,4291 gold badge22 silver badges33 bronze badges

asked Sep 20, 2011 at 14:20

joslinm's user avatar

3

C:\> wmic process get processid,parentprocessid,executablepath|find "process id goes here"

answered Sep 20, 2011 at 14:25

Marc B's user avatar

Marc BMarc B

357k43 gold badges426 silver badges500 bronze badges

6

In powershell:

PS> wmic process  where '(processid=4632)' get 'processid,parentprocessid,executablepath'
ExecutablePath                                              ParentProcessId  ProcessId
C:\Program Files\Docker\Docker\Resources\com.docker.db.exe  4488             4632

answered Jan 16, 2018 at 1:10

uffe hellum's user avatar

Based on joslinm’s solution in the question, here’s a snippet of how to use this in a batch script:

set PID=<this is the child process ID>
for /f "usebackq tokens=2 delims==" %%a in (`wmic process where ^(processid^=%PID%^) get parentprocessid /value`) do (
    set PARENT_PID=%%a
)

Community's user avatar

answered Apr 27, 2015 at 5:39

robinst's user avatar

robinstrobinst

30.2k10 gold badges102 silver badges108 bronze badges

Or you can do something like this in PowerShell:

Get-CimInstance -className win32_process | where-object {$_.ProcessId -eq processId_goes_here } | select ParentProcessId, Name

as well you can filter by name just substitute $_.ProcessId with $_.Name property

answered Dec 18, 2020 at 13:50

knile's user avatar

knileknile

3183 silver badges15 bronze badges

1

Содержание

  1. Отслеживать, какая программа запускает определенный процесс?
  2. 3 ответа
  3. Метод 1 — WMIC
  4. Метод 2 — Монитор процесса
  5. 1. Информация о командной строке в диспетчере задач
  6. 2. Информация о процессе в Process Explorer
  7. 3. Приостановка процесса
  8. 4. Пользовательская программа
  9. 5. Планировщик заданий
  10. 6. Инфекционная чистка
  11. Как узнать, от имени какого пользователя в Windows 10 запущен тот или иной процесс
  12. Как найти вирус в списке процессов Windows

Отслеживать, какая программа запускает определенный процесс?

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

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

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

3 ответа

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

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

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

Метод 1 — WMIC

И это делает остальную часть этого довольно простого

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

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

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

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

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

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

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

Мне удалось использовать имя процесса

>

Сделайте OK .. и файл..capture, если он еще не захвачен.

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

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

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

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

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

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

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

>

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

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

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

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

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

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

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

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

или SysInternals Process Explorer

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

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

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

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

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

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

5. Планировщик заданий

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

6. Инфекционная чистка

Рассмотрена вирусная инфекция? Попробуйте обнаружить его и очистить.

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

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

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

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

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

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

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

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

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

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

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

Если путь «Размещение» ведет в каталог Temp, Temporary Internet Files или еще в какое-либо подозрительное место (например, в папку некой программы каталога Program Files, но вы уверены, что такую программу вы не устанавливали), то, ВОЗМОЖНО, данный процесс принадлежит вирусу. Но все это лишь наши догадки, за подробной информацией, конечно же, лучше обратиться к интернету. Неплохие списки процессов есть на сайтах what-process.com http://www.tasklist.org и http://www.processlist.com . Если после всех поисков ваши опасения на счет подозрительного процесса подтвердятся, можете радоваться – на вашем компьютере поселился вирус, троян или другой зловред, которого нужно срочно ликвидировать.

Но окошко со свойствами запустившего процесс файла из Диспетчера задач может и не открыться. Поэтому помимо стандартных средств Windows нужно пользоваться различными полезными утилитами, способными выдать максимум информации о подозрительном процессе. Одну из таких программ – Starter – мы уже рассматривали (http://www.yachaynik.ru/content/view/88/).

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

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

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

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

После того, как вы получите полную информацию о файле, запустившем процесс, его разработчике, назначении и мнение о процессе в сети интернет, сможете достаточно точно определить – вирус перед вами или мирная программа-трудяга. Здесь действует тот же принцип, что и в Диспетчере задач. Подозрительны те процессы и модули процессов, для которых не указан разработчик, в описании которых ничего нет либо написано что-то невнятное, процесс или задействованные им модули запускаются из подозрительной папки. Например, 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 намного больше, чем в предыдущей версии этой ОС.

Узнать, какие именно службы запускаются процессом svchost.exe, вам поможет другая полезная утилита – Process Explorer. Скачать последнюю версию Process Explorer вы можете с официального сайта Microsoft: technet.microsoft.com

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

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

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

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

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

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

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

Подскажите, допустим программа на C# запускает процесс через Process.Start, а запущенный процесс в свою очередь запускает другую программу.
Можно ли среди запущенных процессов найти , тот процесс, который породил процесс запущенный через Process.Start ?

задан 5 авг 2015 в 19:34

iluxa1810's user avatar

iluxa1810iluxa1810

24.8k12 золотых знаков63 серебряных знака156 бронзовых знаков

Добавить reference на System.Management и

using System;
using System.Diagnostics;
using System.Management;

namespace ConsoleApplication1
{

    class Program
    {
        static void Main(string[] args)
        {
            var cmdProcess = Process.Start("cmd");
            Console.ReadLine();

            var query = string.Format("SELECT ProcessId FROM Win32_Process WHERE ParentProcessId = {0}", cmdProcess.Id);
            var search = new ManagementObjectSearcher("root\\CIMV2", query);

            foreach (var childResult in search.Get())
            {
                var childId = (uint)childResult["ProcessID"];
                var child = Process.GetProcessById((int)childId);

                Console.WriteLine(child.Id + "\t" + child.MainWindowTitle);
            }
        }
    }
}

Если честно — не понял, хотите ли вы найти потомка по родителю или наоборот. Код выше ищет всех потомков для известного родителя.

Если вы знаете потомка, и вам нужно найти его родителя — просто поменяйте местами ProcessId и ParentProcessId в запросе.

ответ дан 5 авг 2015 в 19:47

Не знаю как с C#, но при помощи WinAPI судя по всему можно.
Перечисляем все процессы через CreateToolhelp32Snapshot + Process32First + Process32Next пока не найдем свой процесс (сравнение своего PID с PROCESSENTRY32.th32ProcessID). Как только получили PROCESSENTRY32 для своего процесса — смотрим поле th32ParentProcessID, которое и будет содержать PID родителя.

ответ дан 5 авг 2015 в 19:46

Владимир Мартьянов's user avatar

Владимир МартьяновВладимир Мартьянов

9,6494 золотых знака21 серебряный знак35 бронзовых знаков

  • Как узнать расположение программы в windows 10
  • Как узнать размер оперативной памяти ноутбука windows 10
  • Как узнать режим pio windows 10
  • Как узнать производителя оперативной памяти на компьютере windows 10
  • Как узнать расположение приложения в windows 10