2009-03-15 32 views
19

Tôi muốn tìm cách lặp qua tất cả các quy trình đang hoạt động và kiểm tra chẩn đoán trên chúng (sử dụng mem, thời gian cpu vv) tương tự như trình quản lý tác vụ.Tôi làm cách nào để liệt kê tất cả các tiến trình đang chạy trong Windows?

Vấn đề được chia thành hai phần:

  1. Tìm tất cả các quá trình
  2. Tìm chẩn đoán thuộc tính về họ

Tôi không chắc chắn ngay cả trong những gì namespace để đi tìm về nó . Mọi trợ giúp/mẹo/liên kết đều biết ơn.

Trả lời

49

Tìm tất cả các quá trình

Bạn có thể làm điều này thông qua các lớp Process

using System.Diagnostics; 
... 
var allProcceses = Process.GetProcesses(); 

Chạy Chẩn đoán

Bạn có thể cho chúng tôi một số thông tin ở đây? Nó không rõ ràng những gì bạn muốn làm.

Lớp quy trình cung cấp một chút thông tin mặc dù có thể giúp bạn. Có thể truy vấn lớp này cho

  • Tất cả các chủ đề
  • Main Window Xử lý
  • Tất cả các module nạp
  • thông tin chẩn đoán khác nhau về bộ nhớ (Paged, Virtual, Working Set, vv ...)
  • Thông tin cơ bản Process (id, tên, địa điểm đĩa)

EDIT

Op đã đề cập rằng họ muốn nhận thông tin về bộ nhớ và CPU. Các thuộc tính này có sẵn trên lớp Process (được trả về bởi GetProcesses()). Dưới đây là trang MSDN liệt kê tất cả các thuộc tính được hỗ trợ. Có nhiều bộ nhớ và CPU khác nhau có sẵn mà sẽ bộ nhu cầu của bạn.

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

Code:

Thêm dòng này vào danh sách sử dụng của bạn:

using System.Diagnostics; 

Bây giờ bạn có thể nhận được một danh sách các tiến trình với Process.GetProcesses() phương pháp, như đã thấy trong ví dụ này:

Process[] processlist = Process.GetProcesses(); 

foreach (Process theprocess in processlist) { 
    Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id); 
} 
0

Bạn đang sử dụng hệ điều hành nào? Tôi lấy nó từ thẻ C# của bạn là cửa sổ của nó?

Nếu có, hãy kiểm tra WMI, đặc biệt là lớp Win32_Process.Dưới đây là tài liệu tham khảo MSDN: http://msdn.microsoft.com/en-us/library/aa394372(VS.85).aspx

Cũng như một vài kịch bản sử dụng ở đây (như nhận được một danh sách chương trình): http://msdn.microsoft.com/en-us/library/aa394599(VS.85).aspx

+0

Có nó là cửa sổ (Nó nói trong chủ đề). – Statement

+0

Haha xin lỗi, phần lớn bỏ qua phần của tôi! – CapBBeard

4

Tìm tất cả các tiến trình đang actualy khá dễ dàng:

using System.Diagnostics; 

      Process[] processes = Process.GetProcesses(); 

      foreach (Process process in processes) 
      { 
       //Get whatever attribute for process 
      } 
3

JaredPar đã chỉ ra lớp Process, vì vậy tôi sẽ bổ sung thêm, mà bạn cần phải biết, rằng lớp sẽ lấy một bản chụp của thông tin của tiến trình khi cá thể được tạo ra. Đây không phải là chế độ xem trực tiếp. Để cập nhật, bạn phải gọi số Refresh() trên phiên bản.

Cũng nên nhớ rằng quy trình có thể đóng trong khi bạn đang kiểm tra, vì vậy hãy chuẩn bị để nắm bắt ngoại lệ và xử lý chúng theo đó.

Và cuối cùng, nếu bạn gọi Process.GetProcesses(), bạn cũng sẽ nhận được các quá trình giả "nhàn rỗi" và "hệ thống". IIRC họ có ID quy trình cụ thể để bạn có thể dễ dàng lọc chúng ra.

+0

Cảm ơn bạn đã nhận được. Tôi chắc chắn sẽ lưu ý điều này +1 – Statement

0

Vâng, bạn có thể làm điều này trong PowerShell

1.Finding tất cả các quá trình

get-Process 

chẩn đoán 2.Finding thuộc tính về họ

get-Process | where-object { $_.Handles -gt 200 } 

Đoạn mã trên sẽ trả lại toàn bộ quá trình với trên 200 tay cầm, bạn có thể chỉ định các thuộc tính chẩn đoán theo cách này một cách dễ dàng.

Để biết thêm thông tin về how to handle processes using powershell see this

0
using System.Diagnostics; 

class Program 
{ 
    static void Main() 
    { 
     Process[] processlist = Process.GetProcesses();`   
    } 
} 

đây quá trình arrray chứa tất cả các số của quá trình hiện vào nó.

+0

cải thiện định dạng – GAMITG

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