web-dev-qa-db-ja.com

Windowsで実行されているすべてのプロセスを一覧表示するにはどうすればよいですか?

すべてのアクティブなプロセスをループし、それらの診断チェック(メモリ使用量、CPU時間など)をタスクマネージャーに似た方法で見つけたいと思います。

問題は2つの部分に分けられます。

  1. すべてのプロセスを見つける
  2. それらに関する診断属性を見つける

どの名前空間を調べればよいのかわかりません。ヘルプ/ヒント/リンクはありがたいです。

25
Statement

すべてのプロセスを検索する

あなたはProcessクラスを通じてこれを行うことができます

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

診断を実行しています

ここでもう少し情報をいただけますか?あなたが何をしたいのか明確ではありません。

Processクラスは、あなたを助けるかもしれないが、少しの情報を提供します。このクラスをクエリすることが可能です

  • すべてのスレッド
  • メインウィンドウハンドル
  • ロードされたすべてのモジュール
  • メモリに関するさまざまな診断情報(ページ、仮想、ワーキングセットなど...)
  • 基本的なプロセス情報(ID、名前、ディスクの場所)

[〜#〜]編集[〜#〜]

OPは、メモリとCPUの情報を取得したいと述べました。これらのプロパティは、Processクラスですぐに使用できます(GetProcesses()によって返されます)。以下は、サポートされているすべてのプロパティをリストしているMSDNページです。さまざまなメモリとCPUがあり、ニーズに適合します。

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

コード:

この行を使用リストに追加します。

using System.Diagnostics;

これで、次の例に示すように、Process.GetProcesses()メソッドを使用してプロセスのリストを取得できます。

Process[] processlist = Process.GetProcesses();

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

すべてのプロセスを見つけることは実際にはかなり簡単です:

using System.Diagnostics;

Process[] processes = Process.GetProcesses();

foreach (Process process in processes)
{
    // Get whatever attribute for process.
}
7
Mez

JaredParはすでにProcessクラスを指摘しているので、インスタンスが作成されるときにクラスがプロセスの情報のスナップショットをとることに注意してください。ライブビューではありません。これを更新するには、インスタンスでRefresh()を呼び出す必要があります。

また、検査中にプロセスが終了する可能性があるので、例外をキャッチしてそれに応じて処理する準備をしておいてください。

そして最後にProcess.GetProcesses()を呼び出すと、疑似プロセス「アイドル」と「システム」も取得されます。 IIRCには特定のプロセスIDがあるため、簡単に除外できます。

4
Brian Rasmussen
using System.Diagnostics;

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

ここで、プロセス配列には、そこに存在するすべてのプロセス数が含まれています。

0
Mahesh K Naik

まああなたはこれをpowershellで行うことができます

1.すべてのプロセスを見つける

get-Process 

2.それらに関する診断属性を見つける

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

上記のコードは200以上のハンドルを持つすべてのプロセスを返します。この方法で診断属性を簡単に指定できます。

powershellを使用してプロセスを処理する方法)の詳細については、これを参照してください

0
Binoj Antony

これは私がプロセスにアクセスする方法です:

static void Main(string[] args)
{
    Process.GetProcesses().ToList().ForEach(p =>
    {
        Console.WriteLine(
            p.ProcessName + " p.Threads.Count=" + p.Threads.Count + " Id=" + p.Id);
    });

    Console.ReadKey();
}
0
RollRoll

どのオペレーティングシステムを使用していますか?私はそれがあなたのC#タグからそれがwindowsだと思いますか?

その場合は、WMI、特にWin32_Processクラスを確認してください。これがMSDNリファレンスです: http://msdn.Microsoft.com/en-us/library/aa394372(VS.85).aspx

ここでのいくつかの使用シナリオと同様に(プロセスのリストの取得など): http://msdn.Microsoft.com/en-us/library/aa394599(VS.85).aspx

0
CapBBeard