列出外部进程的运行线程

时间:2013-09-30 09:27:16

标签: c# .net multithreading process

有时我们的客户会使用“ghost”应用程序(这意味着当我们在很长一段时间后关闭应用程序时(比如72小时以上),我们有时会看到视觉上已关闭但仍在进程列表中的应用程序。

由于我们无法轻松复制,我们想知道哪个线程仍在运行。所以我们想提供一个非常小的工具,我们可以在其中选择一个进程(选择一个“ghost”),然后显示我们可以获得的所有信息(主要运行的线程名称)。

所以:

  1. 这可能吗?我不知道c#应用程序是否可以访问 另一个应用程序的线程名称?
  2. 是否有任何现有的应用程序可以执行此类“提取”
  3. 我们应该使用什么来访问这种信息?

3 个答案:

答案 0 :(得分:2)

您可以尝试使用进程资源管理器,这将显示正在运行的进程中的线程的详细信息:

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Process Explorer Threads

答案 1 :(得分:2)

Justin Harvey提到,Process explorer是一个很好的解决方案。

如果您想提供自己的工具,可能会对以下内容感兴趣:

Process.GetProcessByName()Process.Threads

用法

var process = Process.GetProcessByName("myprocess").FirstOrDefault();
var threads = process.Threads;

答案 2 :(得分:1)

虽然您可以访问其他进程的线程信息:

Process[] p = Process.GetProcessesByName("YourProcess");
foreach (ProcessThread thread in p[0].Threads)
{
    Console.WriteLine(thread.Id);
}

无法访问该主题的名称,但您可以检索ProcessThread课程中提供的信息。