find the process tree in .NET

后端 未结 4 2030
青春惊慌失措
青春惊慌失措 2020-12-19 20:36

I\'m looking for an easy way to find the process tree (as shown by tools like Process Explorer), in C# or other .NET language. It would also be useful to find the command-li

4条回答
  •  执念已碎
    2020-12-19 20:50

    If you don't want to P/Invoke, you can grab the parent Id's with a performance counter:

    foreach (var p in Process.GetProcesses())
    {
       var performanceCounter = new PerformanceCounter("Process", "Creating Process ID", p.ProcessName);
       var parent = GetProcessIdIfStillRunning((int)performanceCounter.RawValue);
       Console.WriteLine(" Process {0}(pid {1} was started by Process {2}(Pid {3})",
                  p.ProcessName, p.Id, parent.ProcessName, parent.ProcessId );
    }
    
    //Below is helper stuff to deal with exceptions from 
    //looking-up no-longer existing parent processes:
    
    struct MyProcInfo
    {
        public int ProcessId;
        public string ProcessName;
    }
    
    static MyProcInfo GetProcessIdIfStillRunning(int pid)
    {
        try
        {
            var p = Process.GetProcessById(pid);
            return new MyProcInfo() { ProcessId = p.Id, ProcessName = p.ProcessName };
        }
        catch (ArgumentException)
        {
            return new MyProcInfo() { ProcessId = -1, ProcessName = "No-longer existant process" };
        }
    }
    

    now just put it into whatever tree structure want and you are done.

提交回复
热议问题