2009-04-14 32 views
42

có ai quen thuộc với cách để lấy hồ bơi Ứng dụng được liên kết với ID tiến trình không? Tôi đang sử dụng Win32_Process để truy vấn các dịch vụ W3WP và trả về PID bây giờ tôi đang cố gắng để có được các hồ bơi ứng dụng liên kết với nó.Hồ bơi ứng dụng IIS PID

Trả lời

18

Nếu bạn chỉ sử dụng dòng lệnh để con số nó ra ad-hoc, bạn có thể làm điều này quá:

Các kịch bản đã được đặt trong systemroot \ system32 trên Windows Server 2003 nên chỉ cần đi tới Command Prompt và gõ trong iisapp.vbs (.vbs là tùy chọn) và bạn sẽ có một danh sách tất cả các thông tin App Pool mà bạn luôn muốn biết. Bạn có thể cần phải nhập cscript iisapp.vbs nếu CScript không phải là máy chủ lưu trữ WSH mặc định của bạn.

Chúng ta hãy xem một ví dụ về kết quả:

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

trực tiếp từ miệng của ngựa, Microsoft tài liệu this.

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

Hãy thử làm việc với điều này và nó sẽ giúp bạn có được những gì bạn cần.

87

Trên Windows Server 2008, điều này đã thay đổi.

trong systemroot \ system32 \ inetsrv bạn tìm thấy những appcmd.exe

sử dụng

danh sách appcmd wp

bạn nhận được một danh sách tất cả các quá trình lao động và đó AppPool họ phục vụ.

+0

này dường như không niêm yết hồ bơi ứng dụng chạy như một người dùng máy (SYSTEM/NETWORK SERVICE) .. bất kỳ suy nghĩ nào? – Doug

+8

Tôi có thể liệt kê các vai trò W3wp MẠNG DỊCH VỤ tốt. Có lẽ bạn đã không chạy lệnh với quyền quản trị viên hoặc quá trình W3WP đã được tái chế? – Shaamaan

8

Nếu bạn đang chạy trên Windows Server 2008 và bạn chỉ muốn PID, để nuôi khác kịch bản hay lệnh, bạn có thể sử dụng này:

c:\windows\system32\inetsrv\appcmd list wps /apppool.name:"My Application Pool" /text:WP.NAME 

Ví dụ, để tạo ra một kịch bản hàng loạt tạo một bãi chứa bộ nhớ của một hồ bơi ứng dụng cụ thể, sử dụng này:

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

Điều này khiến tôi bắt đầu, nhưng tôi không quan tâm đến tệp tạm thời. Tôi sửa đổi nó để trích xuất PID vào một biến với các sau: for/F "tokens = 2" %% i in ('% SystemRoot%/system32/inetsrv/appcmd danh sách wps /apppool.name:MyAppPool') làm đặt pid = %% i. – Dono

3

Bạn có thể sử dụng task manager để xem tên người dùng, theo đó quá trình chạy (mà nói chung là giống như tên hồ bơi ứng dụng) và quá trình ID, nhưng bạn phải bật các cột này trong trình quản lý tác vụ và nó cũng giả định tên người dùng mà quá trình chạy dưới cũng giống như tên hồ bơi ứng dụng (đó là mặc định theo như tôi biết, trừ khi một người dùng Sharepoint và tương tự). Cũng xin lưu ý rằng tất cả các phương pháp được liệt kê trong trang này chỉ có thể hiển thị các quy trình hiện đang chạy, có nghĩa là nếu quá trình cụ thể của bạn đã ngừng hoạt động do thời gian rảnh bạn đã sử dụng trang web lần đầu tiên. danh sách, và trong trường hợp của bạn nó có nghĩa là trước tiên bạn nên truy cập vào tất cả các trang web để đảm bảo rằng quá trình liên kết với chúng là runing.

+0

Tại sao lại là downvote? –

+0

Bởi vì liệt kê 10 quy trình W3WP và PID của chúng không cho bạn biết cái nào là ứng dụng Pool Pool nào ... – Shaamaan

+0

@Shaamaan Tôi không đủ rõ ràng, (bây giờ tôi đã chỉnh sửa bài viết để làm rõ hơn), nhưng nó là "Tên người dùng" mà quá trình chạy dưới đó thường giống với tên hồ bơi ứng dụng, (hãy kiểm tra nó ra, nó sẽ giữ đúng trong hầu hết nếu không phải tất cả các tình huống). –

6

Tôi vừa phát hiện ra rằng bạn cũng có thể tìm thấy điều này trong giao diện người dùng cho IIS 7. Chọn nút máy chủ web của bạn và mở "Quy trình công nhân". Thao tác này sẽ hiển thị tên của từng Hồ bơi ứng dụng cùng với ID tiến trình và chi tiết sử dụng của nó.

0

PID và Application Pool cho tên gọi của nó:

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

này nên làm điều đó.

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

Mở IIS Manager (Run> inetmgr), Chọn mức gốc từ trái cây chuyển hướng trang web và từ “Quang cảnh Đặc điểm Panel” chọn “Processes Worker”

Bấm vào “Processes Worker” để có được thông tin chi tiết của tất cả các quá trình lao động mà hiện đang chạy

Từ danh sách này, bạn sẽ nhận được tên hồ bơi ứng dụng, quá trình id

Các vấn đề liên quan