IIS Aplicação piscina PID
-
09-09-2019 - |
Pergunta
é qualquer pessoa familiarizada com a maneira de obter o pool de aplicativos que está associado com um ID de processo? Eu estou usando Win32_Process para consultar os serviços w3wp e retornar o PID agora eu estou tentando obter o pool de aplicativo associado a ele.
Solução
Se você está apenas usando linha de comando para descobrir isso ad-hoc que você pode fazer isso também:
O script já está colocado em systemroot \ system32 no Windows Server 2003 para simplesmente ir para o seu prompt de comando e digite Iisapp.vbs (.vbs é opcional) e você terá uma lista instantânea de todas as informações App Piscina que você sempre quis saber. Você pode precisar digitar Iisapp.vbs cscript se CScript não é o host de script WSH padrão.
Vamos ver um exemplo da saída:
W3WP.exe PID: 1468 AppPoolId: AppPoolForSite1.com
W3WP.exe PID: 3056 AppPoolId: AppPoolForSite2.com
W3WP.exe PID: 1316 AppPoolId: AppPoolForSite3.com
Direto da boca do cavalo, documentos do Microsoft este .
Outras dicas
No Windows Server 2008 isso mudou.
no sistema \ system32 \ inetsrv encontrar o appcmd.exe
usando
appcmd lista wp
Você receberá uma lista de todos os processos de trabalho e que apppool eles estão servindo.
Se você estiver executando no Windows Server 2008 e você só quer que o PID, o feed para outro script ou comando, você pode usar isto:
c:\windows\system32\inetsrv\appcmd list wps /apppool.name:"My Application Pool" /text:WP.NAME
Por exemplo, para criar um script em lotes que cria um despejo de memória de um determinado pool de aplicativos, use a seguinte:
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
Eu só descobri que você também pode encontrar este na interface do usuário para o IIS 7. Selecione o nó do servidor web e "Processos de Trabalho" abertos. Isto irá mostrar o nome de cada pool de aplicativos, juntamente com seus ID e utilização detalhes do processo.
ServerManager serverManager = new ServerManager();
ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
Tente trabalhar com isso e ele deve obter o que você precisa.
Você pode usar o Gerenciador de tarefas para exibir o nome do usuário sob o qual o processo é executado (que, em geral, é o mesmo que o nome do pool de aplicativos) e o ID do processo, mas você tem que ligar estas colunas em gerenciador de tarefas, e também assume o nome de usuário que o processo é executado sob é o mesmo que o nome do pool de aplicativos (que é o padrão, tanto quanto eu sei, a menos que um está usando Sharepoint e outros).
Observe também que todos os métodos listados nesta página somente pode exibir os processos que estão sendo executados, o que significa que se o seu processo particular foi desligado devido ao tempo ocioso você tem primeiro a usar o site, a fim de trazer o processo para cima na lista e, no seu caso isso significa que você deve primeiro acessar todos os sites para se certificar de que o processo associado com eles é runing.
Isso deve fazê-lo.
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;
}
Abra o Gerenciador de IIS (Run> Inetmgr), Select nível da raiz da árvore de navegação do site esquerda e de “Características Ver Painel”, selecione “Processos de Trabalho”
Clique em “Processos de Trabalho” para obter detalhes de todos os processo de trabalho que estão actualmente em execução
A partir desta lista você vai obter o nome do pool de aplicativos, ID do processo
PID e Pool de Aplicativos dando seu nome:
$AppPoolName = 'AppPoolForSite1'
(Get-ItemProperty IIS:\AppPools\$AppPoolName -Name WorkerProcesses).Collection.processId