2009-07-02 3 views
2

나는 많은 자식 프로세스를 생성하는 서비스를 가지고있다. C#을 사용하면 현재 실행중인 자식 프로세스의 수를 결정해야합니다.C#에서 해당 서비스에 대한 하위 프로세스 목록을 얻으려면 어떻게해야합니까?

예를 들어 "TheService"라는 서비스가 실행되고 있습니다. 이렇게하면 5 개의 하위 프로세스 (모두 "process.exe")가 생성됩니다. 서비스에서 실행중인 하위 프로세스의 수를 결정할 수 있습니까? 기본적으로 서비스/서비스 프로세스 이름의 이름 만 주어진 "process.exe"의 인스턴스 수를 알아야합니다.

답변

4

WMI를 사용해야 할 경우 Win32_Process 클래스에는 부모 프로세스 ID가 포함됩니다.

 
SELECT * FROM Win32_Process Where ParentProcessId = n 

는 서비스의 프로세스 ID와 N 교체 : 그래서 WQL 쿼리는 같은 (.NET에서 WMI에 대한 System.Management 네임 스페이스 참조). (Arsen Zahray에 의해 코드 기준)

편집 샘플 코드 :

static List<Process> GetChildPrecesses(int parentId) { 
    var query = "Select * From Win32_Process Where ParentProcessId = " 
      + parentId; 
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); 
    ManagementObjectCollection processList = searcher.Get(); 

    var result = processList.Select(p => 
    Process.GetProcessById(Convert.ToInt32(p.GetPropertyValue("ProcessId"))); 
).ToList(); 

    return result; 
} 
+0

이 목록은 32 비트 프로세스에만 해당합니까 ?? –

+1

@ It'satrap : no (부모가 32 비트이고 자식이 64 인 경우에만 체크 됨). – Richard

+0

고마워요. 나는 나 자신도 확인했다. –

0

"서비스 이름"이 의미하는 것이 정확히 무엇인지 확실하지 않습니다. 즉, process.exe입니까? 그렇다면

, 트릭을 할해야 Process.GetProcessesByName() 정적 방법 :

Process[] procs = Process.GetProcessesByName("process"); 
Console.WriteLine(procs.Length); 

내가 질문을 오해 알려줘.

+0

죄송합니다 나는 매우 분명하지 않다. 좀 더 생각해 보면 주어진 프로세스 이름에 대한 자식 프로세스의 수를 알아야한다는 것을 알게됩니다. 귀하의 답변에 감사드립니다. – Bardsley

+0

확인. 리처드의 대답은 그때 그것을 해결해야합니다. 나는 내 대답을 철회하지만 다른 사람이 반대하지 않는 한, 앞으로 다른 사람들을 도울 수 있으므로 여기에 남겨 둘 것입니다. :) –