2009-04-14 8 views
42

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

ответ

18

Если вы только с помощью командной строки, чтобы понять это Ad-Hoc вы можете сделать это слишком:

Сценарий уже помещен в \ 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 документов this.

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

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

87

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

в системный_корневой_каталог \ system32 \ Inetsrv вы найдете appcmd.exe

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

Appcmd список WP

вы получите список всех рабочих процессов и которые AppPool они порция.

+0

Это, кажется, не список приложений пулы, которые работают как пользователь машины (SYSTEM/NETWORK SERVICE) .. . Есть предположения? – Doug

+8

Я могу просто показать роли NETWORK SERVICE w3wp. Возможно, вы не выполнили команду с правами администратора или процесс W3WP был переработан? – Shaamaan

8

Если вы работаете на 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 
+1

Это заставило меня начать, но мне все равно, временный файл. Я изменил его, чтобы извлечь PID в переменную со следующим: for/F "tokens = 2" %% i in ('% SystemRoot%/system32/inetsrv/appcmd list wps /apppool.name:MyAppPool') установить pid = %% i. – Dono

3

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

+0

Почему downvote? –

+0

Потому что перечисление 10 процессов W3WP и их PID не сообщает вам, какой из них является для этого пула приложений ... – Shaamaan

+0

@Shaamaan Я, вероятно, не был достаточно ясен (теперь я редактировал сообщение, чтобы сделать его более ясным), но это «Имя пользователя», которое выполняется под этим процессом, обычно совпадает с именем пула приложений (проверьте его, оно должно быть истинным в большинстве, если не во всех ситуациях). –

6

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

0

PID из пула приложений и давая свое название:

$AppPoolName = 'AppPoolForSite1' 
(Get-ItemProperty IIS:\AppPools\$AppPoolName -Name WorkerProcesses).Collection.processId 
1

Это должно сделать это.

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; 
} 
1

Открыть IIS Manager (Run> Inetmgr), выберите корневой уровень слева навигация сайта дерева и из «Особенности View Panel» выберите «рабочие процессы»

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

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

Смежные вопросы