2009-04-14 184 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

相關問題