PID пула приложений IIS

Кто-нибудь знаком со способом получить пул приложений, связанный с идентификатором процесса? Я использую Win32_Process, чтобы запросить службы W3WP и вернуть PID, теперь я пытаюсь получить связанный с ним пул приложений.


person Adonis L    schedule 14.04.2009    source источник


Ответы (9)


Если вы просто используете командную строку, чтобы понять это ad-hoc, вы тоже можете сделать это:

Сценарий уже помещен в systemroot \ system32 в Windows Server 2003, поэтому просто перейдите в командную строку и введите iisapp.vbs (.vbs не является обязательным), и вы получите мгновенный список всей информации о пуле приложений, которую вы всегда хотел знать. Вам может потребоваться ввести cscript iisapp.vbs, если CScript не является вашим хостом сценариев WSH по умолчанию.

Давайте посмотрим на пример вывода:

W3WP.exe PID: 1468 AppPoolId: AppPoolForSite1.com
W3WP.exe PID: 3056 AppPoolId: AppPoolForSite2.com
W3WP.exe PID: 1316 AppPoolId: AppPoolForSite3.com

Microsoft прямо из уст лошади документирует это.

person Jim    schedule 14.04.2009
comment
этот сценарий не существует на моем сервере 2008 R2 или 10, см. параметр appcmd.exe ниже - person LostNomad311; 09.08.2018

В Windows Server 2008 это изменилось.

в systemroot \ system32 \ inetsrv вы найдете appcmd.exe

с использованием

appcmd list wp

вы получите список всех рабочих процессов и того, какой пул приложений они обслуживают.

Возможно, вам потребуется запустить это в оболочке с правами администратора.

person Morten    schedule 14.09.2009
comment
Кажется, здесь не перечислены пулы приложений, которые запускаются как пользователь компьютера (СИСТЕМА / СЕТЕВАЯ СЛУЖБА) ... какие-либо мысли? - person Doug; 14.10.2010
comment
Я могу просто перечислить роли w3wp NETWORK SERVICE. Возможно, вы запускали команду не с правами администратора или процесс W3WP был переработан? - person Shaamaan; 18.07.2012
comment
- Запуск от имени администратора--, - Запуск от имени администратора--, - Запуск от имени администратора-- - person snr; 10.02.2020

Если вы работаете в Windows Server 2008 и хотите ТОЛЬКО PID для передачи другому сценарию или команде, вы можете использовать это:

c:\windows\system32\inetsrv\appcmd list wps /apppool.name:"My Application Pool" /text:WP.NAME

Например, чтобы создать пакетный сценарий, который создает дамп памяти определенного пула приложений, используйте это:

c:\windows\system32\inetsrv\appcmd list wps /apppool.name:"My Application Pool" /text:WP.NAME > "%temp%\pid.txt"
for /F %%a in (%temp%\pid.txt) do c:\debugger\adplus.exe -hang -o d:\dumps -p %%a
pause
person Grant Holliday    schedule 22.10.2010
comment
Это заставило меня начать, но меня не волнует временный файл. Я изменил его, чтобы извлечь PID в переменную следующим образом: for / F tokens = 2 %% i in ('% SystemRoot% / system32 / inetsrv / appcmd list wps /apppool.name:MyAppPool') do set pid =% % i. - person Dono; 04.03.2014

Я только что обнаружил, что вы также можете найти это в пользовательском интерфейсе для IIS 7. Выберите узел веб-сервера и откройте «Рабочие процессы». Это покажет имя каждого пула приложений вместе с его идентификатором процесса и сведениями об использовании.

person Dan Bailiff    schedule 11.10.2013

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

person yoel halb    schedule 08.12.2011
comment
Поскольку перечисление 10 процессов W3WP и их PID не говорит вам, какой из них для какого пула приложений ... - person Shaamaan; 15.05.2012
comment
@Shaamaan Я, вероятно, не был достаточно ясным (я отредактировал этот пост, чтобы сделать его более понятным), но это имя пользователя, под которым выполняется процесс, обычно такое же, как имя пула приложений (проверьте это, это должно быть верным в большинстве, если не во всех ситуациях). - person yoel halb; 16.05.2012
comment
Если каждый пул приложений работает от своего собственного пользователя, тогда это правда. Но в случае, скажем, Sharepoint (где у вас может быть столько пулов, сколько сайтов), все они работают от одного и того же пользователя. Поэтому вы полагаетесь на довольно большое предположение. - person Shaamaan; 17.05.2012
comment
Это верно в 95–99% случаев, и в случае, если это не так, имя пользователя просто не будет соответствовать имени пула приложений, и на самом деле appcmd будет иметь ту же проблему (как указал Дуг в комментарий), а диспетчер задач явно намного проще. - person yoel halb; 18.05.2012
comment
Тесто только указал, что appcmd может не указывать пулы приложений SYSTEM / NETWORK SERVICE (я действительно не тестировал это), НЕ то, что пулы приложений под общим пользователем не будут работать с appcmd. Ваше решение по-прежнему бесполезно в описанном мной случае: например, сервер Sharepoint с несколькими сайтами. - person Shaamaan; 18.07.2012
comment
Это было бесполезно во всех случаях, когда мне действительно нужно было проверить роль W3WP; Sharepoint - это всего лишь один пример: другой - экземпляры CRM. В принципе, мне кажется, что если кому-то нужно проверить, что есть что в IIS, то, скорее всего, он борется с чем-то, что находится в том предположении, которое вы сделали на 5%. appcmd просто работает, ваше предложение МОЖЕТ сработать. - person Shaamaan; 18.07.2012
comment
@Shaamaan Я не вижу никакого смысла в вашем комментарии, я ясно предположил в своем сообщении, что имя пользователя, под которым выполняется процесс, совпадает с именем пула приложений, и в этих ситуациях (которые по умолчанию) мой ответ намного проще, чем любой другой ответ, ничто в вопросе не предполагает точку общего доступа или тому подобное, на самом деле один из ответов, который получил два голоса за, просто показывает, как получить PID, если у вас есть пул приложений, который противоположен вопросу, поэтому после все дело в том, что будет полезно для кого-то, посетившего эту страницу. - person yoel halb; 18.07.2012
comment
Какой бы это был ответ? Тот, который ссылается на код (который даст вам всю другую информацию), или тот, который принимает имя пула IIS в качестве аргумента? С тех пор я удалил голос против, поскольку вы прояснили ситуацию. Я позволю голосам говорить за меня, какой вариант лучше из всех. - person Shaamaan; 19.07.2012
comment
Спасибо за указание на это. В моем случае столбец имени пользователя не помогает, но есть еще один столбец под названием «Командная строка», который сообщает мне, какой пул приложений. - person Brian; 22.11.2012

ServerManager serverManager = new ServerManager();
ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;

Попробуйте поработать с этим, и вы получите то, что вам нужно.

person Chris Ballance    schedule 14.04.2009

Откройте диспетчер IIS («Выполнить»> «Inetmgr»), выберите корневой уровень в левом дереве навигации сайта и в «Панели просмотра функций» выберите «Рабочие процессы».

Щелкните «Рабочие процессы», чтобы получить подробную информацию обо всех рабочих процессах, которые выполняются в данный момент.

Из этого списка вы получите имя пула приложений, идентификатор процесса

person sachin    schedule 02.02.2017

Это должно сработать.

public string getAppPoolName(int pid)
{            
    ServerManager serverManager = new ServerManager();

    ApplicationPoolCollection apc = serverManager.ApplicationPools;

    foreach (var app in apc)
    {
        var workers = app.WorkerProcesses;

        foreach (var w in workers)
        {                   
            if (w.ProcessId == pid)
            {
                return app.Name;
            }
        }
    }

    return string.Empty;
}
person P. Raphael    schedule 01.06.2016

PID и пул приложений, дающий его имя:

$AppPoolName = 'AppPoolForSite1'
(Get-ItemProperty IIS:\AppPools\$AppPoolName -Name WorkerProcesses).Collection.processId
person Angel Abad Cerdeira    schedule 18.01.2016