문제

프로세스 ID와 관련된 응용 프로그램 풀을 얻는 방법에 익숙한 사람이 있습니까? Win32_Process를 사용하여 W3WP 서비스를 쿼리하고 PID를 반환하고 있습니다. 이제 앱 풀을 연결하려고합니다.

도움이 되었습니까?

해결책

명령 줄을 사용하여 임시를 파악하는 경우 다음에도 할 수 있습니다.

스크립트는 이미 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

말의 입에서 직접 마이크로 소프트는 문서를 문서화합니다 이것.

다른 팁

Windows Server 2008에서 이것은 변경되었습니다.

SystemRoot System32 inetSrv에서 appcmd.exe를 찾을 수 있습니다.

사용

APPCMD 목록 wp

모든 작업자 프로세스 목록과 그들이 제공하는 앱 풀 목록을 얻습니다.

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

방금 IIS 7의 UI에서 찾을 수 있음을 알게되었습니다. 웹 서버 노드를 선택하고 "작업자 프로세스"를 열었습니다. 여기에는 프로세스 ID 및 활용 세부 정보와 함께 각 응용 프로그램 풀의 이름이 표시됩니다.

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

이것으로 작업하면 필요한 것을 얻을 수 있습니다.

작업 관리자를 사용하여 프로세스가 실행되는 사용자 이름 (일반적으로 응용 프로그램 풀 이름과 동일) 및 프로세스 ID를 볼 수 있지만 작업 관리자에서 이러한 열을 켜야합니다. 프로세스가 실행되는 사용자 이름은 응용 프로그램 풀 이름과 동일합니다 (SharePoint 등을 사용하지 않는 한 내가 아는 한 기본값입니다).
또한이 페이지에 나열된 모든 방법은 현재 실행중인 프로세스 만 표시 할 수 있습니다. 즉, 유휴 시간으로 인해 특정 프로세스가 종료 된 경우 목록에 프로세스를 제기하기 위해 사이트를 사용해야합니다. , 귀하의 경우에는 먼저 모든 사이트에 액세스하여 관련 프로세스가 실행되고 있는지 확인해야합니다.

이렇게해야합니다.

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

Open IIS Manager (run> inetmgr), 왼쪽 사이트 탐색 트리에서 루트 레벨을 선택하고 "기능보기 패널"에서 "작업자 프로세스"를 선택하십시오.

현재 실행중인 모든 작업자 프로세스에 대한 세부 정보를 얻으려면 "작업자 프로세스"를 클릭하십시오.

이 목록에서 응용 프로그램 풀 이름, 프로세스 ID를 얻을 수 있습니다.

이름을 부여하는 PID 및 애플리케이션 풀 :

$AppPoolName = 'AppPoolForSite1'
(Get-ItemProperty IIS:\AppPools\$AppPoolName -Name WorkerProcesses).Collection.processId
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top