2009-04-14 50 views
42

は、プロセスIDに関連付けられているアプリケーションプールを取得する方法を熟知している人ですか? Win32_Processを使用してW3WPサービスを照会し、PIDを返すようになりました。現在、関連するアプリケーションプールを取得しようとしています。IISアプリケーションプールPID

答えて

18

あなただけのあなたもこれを行うことができアドホックそれを把握するために、コマンドラインを使用している場合:

スクリプトがすでにので、単にWindows Server 2003上SYSTEMROOTの\ system32にに配置され、あなたのコマンドプロンプトと型に行きます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の

を見つけますサービング。

+0

これは、マシンのユーザー(SYSTEM /ネットワークサービス)として実行するアプリケーションプールをリストしていないようです。.. 。 何かご意見は? – Doug

+8

NETWORK SERVICE w3wpの役割をうまく列挙できます。おそらくあなたは管理者権限でコマンドを実行しなかったか、W3WPプロセスがリサイクルされたでしょうか? – Shaamaan

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を変数に抽出しました:/ F "tokens = 2" %% i( '%SystemRoot%/ system32/inetsrv/appcmd list wps /apppool.name:MyAppPool')にpidを設定します= %% i。 – Dono

3

あなたは、プロセスは、(一般的にはアプリケーションプール名と同じである)実行に使用されるユーザー名を表示するには、タスクマネージャを使用して処理することができますIDが必要ですが、タスクマネージャでこれらの列をオンにする必要があります。プロセスが実行されるユーザー名はアプリケーションプール名と同じです(私が知る限り、これはSharepointなどを使用していない限りデフォルトです)。
また、このページに記載されているすべての方法では、現在実行中のプロセスのみが表示される場合があります。つまり、アイドル時間のために特定のプロセスがシャットダウンした場合は、あなたの場合は、最初にすべてのサイトにアクセスして、関連するプロセスが実行中であることを確認する必要があります。

+0

なぜdownvote? –

+0

リスト10のW3WPプロセスとそのPIDは、どのアプリケーションプールがどのアプリケーションプールであるかを教えてくれないので... – Shaamaan

+0

@Shaamaan私は十分にはっきりしていませんでした(私は今投稿を編集してより明確にしています)。プロセスが実行される「ユーザー名」は、通常はアプリケーションプール名と同じです(チェックアウトすると、すべての状況ではないにしても、ほとんどの場合その内容が保持されます)。 –

6

IIS 7のUIでこれを見つけることもできます。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

関連する問題