2009-04-14 188 views
42

是否有人熟悉如何获取与进程ID关联的应用程序池?我正在使用Win32_Process来查询W3WP服务并返回PID,现在我试图获取与之关联的应用程序池。IIS应用程序池PID

回答

18

如果你只是使用命令行来弄明白特设你也可以这样做:

草稿已经放置在systemroot \ System32 Windows Server 2003上所以干脆去你的命令提示符和类型在iisapp.vbs中(.vbs是可选的),您将立即获得您一直想知道的所有App Pool信息的列表。如果CScript不是您的默认WSH脚本宿主,则可能需要键入cscript iisapp.vbs。

让我们看到输出的例子:

从马的嘴,微软文档 this
W3WP.exe PID: 1468 AppPoolId: AppPoolForSite1.com 
W3WP.exe PID: 3056 AppPoolId: AppPoolForSite2.com 
W3WP.exe PID: 1316 AppPoolId: AppPoolForSite3.com 

直接。

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

试着用这个工作,它应该得到你所需要的。

87

在Windows Server 2008上已更改。

在systemroot

\ SYSTEM32 \ INETSRV你发现使用

APPCMD列表WP的Appcmd.exe的

你所有的工作进程的列表和APPPOOL他们服务。

+0

这似乎并没有列出,作为一个计算机用户(系统/网络服务)上运行的应用程序池中的所有工作进程的.. 。 有什么想法吗? – Doug 2010-10-14 03:53:16

+8

我可以列出网络服务w3wp角色就好了。也许你没有使用管理员权限运行该命令,或者W3WP进程已被回收? – Shaamaan 2012-07-18 09:21:56

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')do set pid = %%我。 – Dono 2014-03-04 09:51:39

3

您可以使用任务管理器来查看用户名在其下运行的过程(这一般是相同的应用程序池名称)和过程ID,但你必须在任务管理器中打开这些列,并且它也假定为该进程所运行的用户名与应用程序池名称相同(据我所知,这是默认的,除非有人使用Sharepoint等)。
另请注意,此页面中列出的所有方法可能只显示当前正在运行的进程,这意味着如果您的特定进程由于空闲时间而关闭,则必须先使用该站点才能启动进程该列表,在你的情况下,这意味着你应该首先访问所有网站,以确保与它们相关的进程正在运行。

6

我刚刚发现你也可以在IIS的用户界面中找到它。选择你的Web服务器节点并打开“工作进程”。这将显示每个应用程序池的名称以及其进程ID和利用率详细信息。

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管理器(运行> INETMGR),从左边网址导航树和选择根级别“功能视图面板”中选择“工作进程”

点击“工作进程”,以获得详细信息这是目前运行

从这个列表中,您将获得应用程序池名称,进程ID

相关问题