C# 시샵 프로세스 종료하는 방법 |
환경: Visual Studio 2013 |
C# 에서는 Process 라는 내장 객체를 사용해서 외부 프로세스를 제어할 수 있습니다. 그러니까 윈도우에 떠 있는 현재 프로세스 정보와 특정 프로세스를 골라서 종료 시킬 수도 있습니다. 이번에 소개할 샘플은 Process 객체에서 모든 프로세스 정보를 알아 온 후 윈도우 폼에 추가합니다. 그리고 목록에서 원하는 프로세스를 종료시키는 샘플입니다.
▼ 완성된 화면은 아래와 같습니다. 현재 컴퓨터에서 실행되고 있는 모든 프로세스 정보를 가져온 후 리스트에 넣어 줍니다. 그리고 원하는 프로세스를 선택한 후 [프로세스 종료] 버튼을 누르면 됩니다.
▼ 먼저 프로세스 정보를 가져오는 소스는 아래와 같습니다. Process 객체의 GetPrecesses() 함수를 이용해서 모든 프로세스 정보를 가져옵니다. 가져온 프로세스 배열 정보를 직접 만든 WriteProcessInfo() 함수를 이용해 ListView 에 추가합니다. 그럼 위의 화면처럼 목록에 프로세스 정보가 나열이 됩니다.
Process[] pros = Process.GetProcesses(); //시스템의 모든 프로세스 정보 출력 label2.Text = Convert.ToString(pros.Length); foreach (Process p in pros) { WriteProcessInfo(p); } private void WriteProcessInfo(Process processInfo) { string[] row = { processInfo.ProcessName, Convert.ToString(processInfo.Id), Convert.ToString(processInfo.VirtualMemorySize64) }; var listViewItem = new ListViewItem(row); lstProcess.Items.Add(listViewItem); }
▼ 이렇게 나열된 프로세스 목록에서 종료 하고 싶은 항목이 있다면 선택하고 바로 아래 [프로세스 종료] 버튼을 클릭합니다. 아래 소스는 [프로세스 종료] 버튼 이벤트 함수의 내용입니다. 내부에 보시면 먼저 SelectedItems.Count 로 리스트뷰에서 프로세스를 몇 개나 선택했는지 개수를 알아 옵니다. 선택한 것이 있다면 1, 2번째 열에 있는 프로세스 ID와 이름을 가져옵니다. 그리고 이름으로 Process.GetProcessesByName() 함수를 통해 현재 떠 있는 해당 프로세스 정보를 리턴 받습니다. 동일한 프로세스 이름으로 여러 개 있을 수 있기 때문에 배열로 받게 됩니다. 다음은 foreach 문을 이용해서 하나씩 꺼내 kill() 함수로 프로세스를 종료시킵니다.
private void btnProcessClose_Click(object sender, EventArgs e) { if (lstProcess.SelectedItems.Count < 0) { string id = lstProcess.SelectedItems[0].SubItems[1].Text; string name = lstProcess.SelectedItems[0].SubItems[0].Text; Console.WriteLine("프로세스 PID : {0}", id); if (MessageBox.Show(name + " 종료하시겠습니까?", "입력 취소", MessageBoxButtons.YesNo) == DialogResult.Yes) { // 프로세스 종료 Process[] pros = Process.GetProcessesByName(name); //시스템의 모든 프로세스 정보 출력 foreach (Process p in pros) { p.Kill(); } } } }
▼ 아래는 프로그램을 구현한 전체 소스입니다.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Diagnostics; namespace GonAlarm { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { try { Process[] pros = Process.GetProcesses(); //시스템의 모든 프로세스 정보 출력 label2.Text = Convert.ToString(pros.Length); foreach (Process p in pros) { WriteProcessInfo(p); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } private void WriteProcessInfo(Process processInfo) { string[] row = { processInfo.ProcessName, Convert.ToString(processInfo.Id), Convert.ToString(processInfo.VirtualMemorySize64) }; var listViewItem = new ListViewItem(row); lstProcess.Items.Add(listViewItem); } private void btnProcessClose_Click(object sender, EventArgs e) { if (lstProcess.SelectedItems.Count < 0) { string id = lstProcess.SelectedItems[0].SubItems[1].Text; string name = lstProcess.SelectedItems[0].SubItems[0].Text; Console.WriteLine("프로세스 PID : {0}", id); if (MessageBox.Show(name + " 종료하시겠습니까?", "입력 취소", MessageBoxButtons.YesNo) == DialogResult.Yes) { // 프로세스 종료 Process[] pros = Process.GetProcessesByName(name); //시스템의 모든 프로세스 정보 출력 foreach (Process p in pros) { p.Kill(); } } } } } }
'기타 언어 > C# & MFC' 카테고리의 다른 글
시샵 C# ListView 마지막에 추가한 데이터에 스크롤 위치시키는 방법 (0) | 2019.06.10 |
---|---|
시샵 C# using 네임스페이스 자동으로 추가하는 방법 (0) | 2019.05.22 |
C 언어 무료 컴파일 도구 Dev C++ 새 프로젝트 만들어서 실행하기 (0) | 2019.03.13 |
C 언어 무료 컴파일 도구 Dev C++ 사용하는 방법 (1) | 2019.03.12 |
C# 관리되지 않는 객체(unmanaged) 해제하기 위한 using 문 사용하기 (0) | 2018.09.29 |
[C#] ListView 선택한 행 더블 클릭 이벤트를 통해 해당 값을 알아오는 방법 (0) | 2018.05.19 |
[C#] 자바스크립트에서 C# 함수호출시 에러, ObjectForScripting 클래스는 COM … (0) | 2015.05.31 |
[C#] HashTable 사용방법과 예제 모음 (0) | 2015.02.24 |