2009-03-31 3 views
2

저는 System.Diagnostics.Process 클래스에 대해 잘 알고 있습니다. 하지만 특정 프로세스를 모니터링 할 수있는 방법에 대해 궁금합니다. 즉, XX 초/초마다 실행되는지 확인하십시오. 나는 프로세스가 실행 중인지 여부를 검사 할 수 있어야하고, 그렇다면 나머지 프로그램을 계속 초기화 할 수 있어야한다. 여전히 실행중인 경우 확인프로세스 모니터링

감사합니다,
-Zack

답변

4

, 당신은 당신이 한 번 Process.GetProcessesByName(...) 또는 Process.GetProcesses(...)

에 의해 반환 된 목록을 보면 프로세스와 관련된 Process 개체를 찾을받을 선호 :)의 순서로 효율적이다 그 과정을 가지고 있다면, EnableRaisingEvents을 설정하면 그 속성 (예 : HasExited)을 읽고 (Jon이 그의 답변에서 언급 한 바와 같이)들을 수 있습니다. 그 이벤트 (예 : Exited)를들을 수 있습니다.

5

은 간단합니다 : Process.HasExited.

주기적으로 폴링하지 않고 EnableRaisingEvents을 true로 설정하고 Exited 이벤트에 처리기를 연결할 수 있습니다.

편집 : 프로세스를 "가져 오는"것에 대한 질문에서 대답하십시오 - 당신이 이미 알고있는 것에 달려 있습니다. 프로세스 ID를 알고 있다면 Process.GetProcessById을 사용할 수 있습니다. 이름 만 알면 Process.GetProcessesByName을 사용해야하고 여러 결과가 나타나면 어떻게해야하는지 알아야합니다. 정확히 이름을 모르는 경우 Process.GetProcesses을 사용하고 이 무엇이든 찾아보십시오.에 대해 알고 계십시오. 이러한 옵션은이 과정을 직접 시작하지 않은 경우

+0

실제 프로세스를 가져 와서 실행 중인지 확인하십시오. – Zack

+0

감사합니다. 실제로 당신과 다니엘의 솔루션을 조합했습니다. – Zack

+0

내 응용 프로그램에서 처리되지 않은 예외가 있고 프로세스를 닫지 않지만 응답이없고 응답이없는 경우 어떻게 상태를 얻을 수 있습니까? –

-1

어쩌면 이렇게 될까요?

 Process[] processlist = Process.GetProcesses(); 

     bool found = false; 
     foreach (Process theprocess in processlist) 
     { 
      if(theprocess.ProcessName == "YourProcessName") 
      { 
       found = true; 
       break; 
      } 
     } 

     if (!found) 
     { 
      return; 
     } 
+1

실제 이름을 알고 있다면 GetProcessesByName을 사용할 수도 있습니다 ... –