연습: Windows 프로세스 관리

업데이트: 2007년 11월

이 항목에 있는 연습에서는 프로세스를 만들고 프로세스가 중지될 때 응답하고 프로세스를 중지하는 방법에 대해 단계별로 설명합니다. 첫 번째 부분에서는 메모장 프로세스를 시작하고 중지하는 Button 컨트롤이 있는 Windows 응용 프로그램을 만듭니다. 메모장의 인스턴스 여러 개를 개별적으로 시작한 다음 이를 그룹화하여 모두 중지합니다. 두 번째 부분에서는 사용자의 컴퓨터에서 실행되는 프로세스를 열거하는 콘솔 응용 프로그램을 만듭니다.

Process 구성 요소를 사용하여 시스템 프로세스와 상호 작용하는 방법에 대한 자세한 내용은 Windows 프로세스 모니터링 및 관리 소개를 참조하십시오.

참고:

실제 설정이나 버전에 따라서 화면에 나타나는 대화 상자와 메뉴 명령이 도움말의 설명과 다를 수 있습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

응용 프로그램을 만들려면

  1. 새 프로젝트 대화 상자에서 Visual Basic, Visual C# 또는 Visual J#Windows 응용 프로그램을 만듭니다.

  2. Form1 디자이너를 연 상태에서 도구 상자의 Windows Forms 탭을 클릭한 다음 두 개의 단추를 폼에 추가합니다.

  3. 속성 창에서 다음과 같이 속성을 변경합니다.

    컨트롤

    속성

    Button1

    Name

    ButtonStart

     

    Text

    Start Process

    Button2

    Name

    ButtonStop

     

    Text

    Stop Process

  4. 도구 상자에서 구성 요소 탭을 클릭한 다음 Process 구성 요소의 인스턴스를 디자이너 화면으로 끌어 옵니다.

  5. 구성 요소에 myProcess라는 이름을 지정합니다.

Notepad.exe 프로세스를 시작하려면

  1. Process 구성 요소 인스턴스의 속성 창에서 StartInfo 속성을 확장한 다음 FileName 속성을 notepad.exe로 설정합니다.

  2. 시작 단추를 두 번 클릭하여 코드 편집기에 액세스한 다음 ButtonStart_Click() 이벤트에 다음 코드를 추가합니다.

    myProcess.Start
    
    myProcess.Start();
    
  3. 모든 파일을 저장한 다음 응용 프로그램을 빌드하고 실행합니다.

  4. Start Process 단추를 몇 번 클릭합니다. 단추를 클릭할 때마다 메모장의 별도 인스턴스가 나타납니다.

    보안 정보:

    부분 신뢰 컨텍스트에서 실행 중인 경우에는 권한이 부족하여 프로세스에서 SecurityException 예외를 throw할 수 있습니다. 자세한 내용은 코드 액세스 보안 기본 사항을 참조하십시오.

  5. 개별 메모장 응용 프로그램을 닫습니다.

  6. Form1 응용 프로그램을 닫습니다.

Notepad.exe 프로세스의 현재 인스턴스를 모두 닫으려면

  1. 코드 편집기에서 Form1에 액세스합니다.

  2. 디자인 뷰에서 중지 단추를 두 번 클릭하여 ButtonStop_Click() 프로시저에 액세스합니다.

  3. 메모장의 현재 인스턴스를 닫는 아래의 코드를 추가합니다.

    Private Sub ButtonStop_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles ButtonStop.Click
       Dim myProcesses() As Process
       Dim instance As Process
       myProcesses = Process.GetProcessesByName("Notepad")
       For Each instance In myProcesses
          instance.CloseMainWindow()
          instance.Close()
       Next
    End Sub
    
    private void ButtonStop_Click(object sender, System.EventArgs e)
    {
       System.Diagnostics.Process[] myProcesses;
       myProcesses = 
          System.Diagnostics.Process.GetProcessesByName("Notepad");
       foreach (System.Diagnostics.Process instance in myProcesses)
       {
          instance.CloseMainWindow();
          instance.Close();
       }
    }
    
  4. 모든 파일을 저장한 다음 응용 프로그램을 빌드하고 실행합니다.

  5. Start Process 단추를 클릭하여 메모장의 여러 인스턴스를 시작합니다.

  6. Stop Process 단추를 클릭하여 메모장의 실행 중인 인스턴스 모두를 즉시 닫습니다.

  7. Form1 응용 프로그램을 닫습니다.

다음 단계에서는 프로세스의 실행이 끝날 때까지 기다리도록 코드를 작성합니다.

메모장 프로세스 실행을 마칠 때까지 기다리도록 구성 요소를 구성하려면

  1. 코드 편집기에서 Form1에 액세스합니다.

  2. 각 창을 닫기 전에 일시 중지하는 코드를 한 줄 추가합니다.

    Private Sub ButtonStop_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles ButtonStop.Click
       Dim myProcesses() As Process
       Dim instance As Process
       myProcesses = Process.GetProcessesByName("Notepad")
       For Each instance In myProcesses
          instance.CloseMainWindow()
          instance.WaitForExit(3000)
          instance.Close()
       Next
    End Sub
    
    private void ButtonStop_Click(object sender, System.EventArgs e)
    {
       System.Diagnostics.Process[] myProcesses;
       myProcesses = 
          System.Diagnostics.Process.GetProcessesByName("Notepad");
       foreach (System.Diagnostics.Process instance in myProcesses)
       {
          instance.CloseMainWindow();
          instance.WaitForExit(3000);
          instance.Close();
       }
    }
    
  3. 모든 파일을 저장한 다음 응용 프로그램을 빌드하고 실행합니다.

  4. Start Process 단추를 클릭하여 메모장의 여러 인스턴스를 시작합니다.

  5. 이전과 마찬가지로 Stop Processes단추를 클릭하여 프로세스를 닫습니다.

    이전과 달리 응용 프로그램에서는 프로세스의 다음 인스턴스를 닫기 전에 각 프로세스가 중지되도록 3초 동안 기다립니다.

  6. Form1 응용 프로그램을 닫습니다.

이 연습의 다음 단계에서는 로컬 컴퓨터의 프로세스를 검색하여 나열하는 새로운 콘솔 응용 프로그램을 만듭니다.

컴퓨터의 프로세스를 열거하려면

  1. 콘솔 응용 프로그램 프로젝트를 새로 만듭니다.

  2. 코드 편집기를 열고 Main 메서드를 수정하여 컴퓨터에 있는 프로세스를 열거합니다.

    Sub Main()
       Dim processes() As Process
       Dim instance As Process
       processes = Process.GetProcesses
       For Each instance In processes
          Console.WriteLine(instance.ProcessName)
       Next
       System.Threading.Thread.Sleep(5000)
    End Sub
    
    static void Main()
    {
       System.Diagnostics.Process[] processes;
       processes = System.Diagnostics.Process.GetProcesses();
       foreach (System.Diagnostics.Process instance in processes)
       {
          Console.WriteLine(instance.ProcessName);
       }
       System.Threading.Thread.Sleep(5000);
    }
    
  3. 모든 파일을 저장한 다음 응용 프로그램을 빌드하고 실행합니다.

    이 응용 프로그램에서는 컴퓨터에서 현재 실행 중인 모든 프로세스를 콘솔 창에 나열하며, Sleep 호출의 결과로 5초 동안 기다린 후 콘솔 창을 닫습니다.

    참고:

    GetProcesses 또는 GetProcessesByName을 호출하고 반환된 프로세스 중 하나가 그 다음 호출을 수행하기 전에 종료되면 이러한 두 프로시저에서 예외가 발생할 수 있습니다. 이 경우, 프로세스가 없다는 내용의 예외가 발생합니다.

참고 항목

작업

방법: 프로세스 지정

방법: 프로세스 중지

기타 리소스

프로세스 관리