ワーカープロセスを列挙する方法
マネージド コード API を使って、現在実行中のワーカープロセスを列挙する方法を示します。
Microsoft.Web.Administration 名前空間の、ServerManager から WorkerProcesses コレクションを取得することができ、これらの要素である WorkerProcess から情報を取得できます。
尚、以下のサンプルではプロセス ID が取れたついでに、System.Diagnostics.Process オブジェクトも取得して、その結果を少し表示しています。
コードサンプル
ソースコード
EnumWP.cs として以下を保存します。
// // EnumWP.cs // // Author: Dado-san // http://keicode.com/ // using System; using System.Diagnostics; using Microsoft.Web.Administration; ////////////////////////////////////////////////////////////////////////// class EnumWorkerProcessApp { public static void Main() { EnumWorkerProcess(); } public static void EnumWorkerProcess() { ServerManager manager = new ServerManager(); if ( manager.WorkerProcesses.Count == 0 ) { Console.WriteLine ( "No worker process running." ); return; } foreach ( WorkerProcess wp in manager.WorkerProcesses ) { Console.WriteLine ( "AppPoolName: {0}", wp.AppPoolName ); Console.WriteLine ( "ProcessId: {0}", wp.ProcessId ); Console.WriteLine ( "ProcessGuid: {0}", wp.ProcessGuid ); Console.WriteLine ( "State: {0}", wp.State ); foreach ( ApplicationDomain ad in wp.ApplicationDomains ) { Console.WriteLine ( "ApplicationDomain: {0}", ad.VirtualPath ); Console.WriteLine ( " PhysicalPath: {0}", ad.PhysicalPath ); Console.WriteLine ( " Idle: {0}", ad.Idle ); Console.WriteLine ( " Id: {0}", ad.Id ); } // System.Diagnostics.* Process p = Process.GetProcessById ( wp.ProcessId ); ShowProcessInfo( p ); } } public static void ShowProcessInfo ( Process p ) { Console.WriteLine ( "BasePriority: {0}", p.BasePriority ); Console.WriteLine ( "HandleCount: {0}", p.HandleCount ); Console.WriteLine ( "MachineName: {0}", p.MachineName ); Console.WriteLine ( "MainModule: {0}", p.MainModule ); Console.WriteLine ( "MainWindowTitle: {0}", p.MainWindowTitle ); Console.WriteLine ( "MaxWorkingSet: {0}", p.MaxWorkingSet ); } }
makefile は次のようになります。
CSC = csc.exe TARGETNAME=enumwp SOURCE_FILE=enumwp.cs REF=/r:$(SYSTEMROOT)\System32\inetsrv\Microsoft.Web.Administration.dll OUTDIR=.\chk all: "$(OUTDIR)\$(TARGETNAME).exe" "$(OUTDIR)" : @if not exist "$(OUTDIR)" mkdir "$(OUTDIR)" CSC_OPT=\ /nologo\ /target:exe\ /out:$(OUTDIR)\$(TARGETNAME).exe\ /doc:$(OUTDIR)\$(TARGETNAME).xml\ /debug+\ /debug:full\ /optimize-\ /warn:4 $(OUTDIR)\$(TARGETNAME).exe: "$(OUTDIR)" $(SOURCE_FILE) $(CSC) $(CSC_OPT) $(REF) $(SOURCE_FILE)
ビルド
上記を nmake でビルドしてください。chk サブディレクトリの中に enumwp.exe が出来上がります。
実行例
上で作成した enumwp.exe を実行すると以下の結果を得ました。
> enumwp
AppPoolName: DefaultAppPool
ProcessId: 3808
ProcessGuid: 9464250e-2b06-476a-999b-a4ca79e1d65d
State: Running
ApplicationDomain: /vdir/
PhysicalPath: C:\temp\
Idle: 1
Id: /LM/W3SVC/1/ROOT/vdir
BasePriority: 8
HandleCount: 402
MachineName: .
MainModule: System.Diagnostics.ProcessModule (w3wp.exe)
MainWindowTitle:
MaxWorkingSet: 1413120
>