簡體   English   中英

IIS應用程序池PID

[英]IIS Application pool PID

有沒有人熟悉獲取與進程 ID 關聯的應用程序池的方法? 我正在使用 Win32_Process 查詢 W3WP 服務並返回 PID 現在我正在嘗試獲取與其關聯的應用程序池。

在 Windows Server 2008 上,這已經改變了。

在 systemroot\\system32\\inetsrv 中,您可以找到 appcmd.exe

使用

appcmd 列表 wp

您將獲得所有工作進程的列表以及它們正在服務的應用程序池。

您可能需要在具有管理員權限的 shell 中運行它。

如果您只是使用命令行來臨時解決,您也可以這樣做:

該腳本已放置在 Windows Server 2003 上的 systemroot\\system32 中,因此只需轉到您的命令提示符並鍵入 iisapp.vbs(.vbs 是可選的),您將獲得所有應用程序池信息的即時列表一直想知道。 如果 CScript 不是您的默認 WSH 腳本宿主,您可能需要鍵入 cscript iisapp.vbs。

讓我們看一個輸出示例:

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

直接從馬的嘴里,微軟記​​錄了這一點

我剛剛發現您也可以在 IIS 7 的 UI 中找到它。選擇您的 Web 服務器節點並打開“工作進程”。 這將顯示每個應用程序池的名稱及其進程 ID 和利用率詳細信息。

如果您在 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

可以使用任務管理器查看進程運行的用戶名(一般與應用程序池名稱相同)和進程ID,但必須在任務管理器中打開這些列,並且還假定進程在其下運行的用戶名與應用程序池名稱相同(據我所知,這是默認值,除非使用 Sharepoint 等)。
另請注意,此頁面中列出的所有方法可能僅顯示當前正在運行的進程,這意味着如果您的特定進程因空閑時間而關閉,您必須首先使用該站點才能將該進程顯示在列表中,就您而言,這意味着您應該首先訪問所有站點以確保與它們關聯的進程正在運行。

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

嘗試使用它,它應該可以滿足您的需求。

打開 IIS 管理器(運行 > Inetmgr),從左側站點導航樹中選擇根級別,然后從“功能視圖面板”中選擇“工作進程”

單擊“工作進程”以獲取當前正在運行的所有工作進程的詳細信息

從此列表中,您將獲得應用程序池名稱、進程 ID

這應該這樣做。

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

PID 和應用程序池給出了它的名字:

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

如果您有多個應用程序池並想知道每個應用程序池的 PID。 您可以運行下面的 powershell,它將遍歷機器上的所有應用程序池,查詢 PID,並以漂亮的表格格式顯示應用程序池名稱和 PID。

import-module webadministration

$dirs = dir IIS:\AppPools\

foreach($dir in $dirs)
{
    Write-Output([pscustomobject]@{
        Name = $dir.Name
        PID = (dir IIS:\AppPools\$($dir.Name)\WorkerProcesses).ProcessId
    })
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM