C# - 시스템 프로그래밍

다른 프로세스 실행

System.Diagnostics.Process.Start("실행파일경로\실행파일명.exe",파라메터)
System.Diagnostics.Process.Start("cmd.exe 명령어");

프로세스 종료

System.Diagnostics.Close();                    // 프로세스의 리소스를 해재(종료) 시킨다.
System.Diagnostics.CloseMainWindow();  // UI가 있는 프로세스에 메시지를 보내 종료 시킨다.
System.Diagnostics.Kill();                        // 즉시 프로세스를 종료시킨다.

프로세스 실행 후 종료까지 대기

System.Diagnostics.Process p = System.Diagnostics.Process.Start("C:\\test.txt");
p.WaitForExit(); //혹은 시간으로 설정 가능  p.WaitForExit(10000);

프로세스 실행 후 종료를 비동기로 대기

private void button1_Click(object sender, System.EventArgs e)
{
    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.FileName = "notepad.exe";
    p.SynchronizingObject = this;
    
    p.Exited += new EventHandler(p_Exited);
    p.EnableRaisingEvents = true;
    
    p.Start();
}

private void p_Exited(object sender, EventArgs e)
{
    // 프로세스가 종료하면 이벤트 실행
}

실행중인 프로세스 찾기

System.Diagnostics.Process.GetProcessByName( "실행파일 이름" );

Process[] localByName = Process.GetProcessesByName("LoginServerr");
if (localByName.Length > 0)
{
     return true;
}

Win32 API의 SendMessage 사용

const int WM_COPYDATA = 0x4A;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);
 
Process[] AppServerProcess = Process.GetProcessesByName("LoginServer");
//.................
SendMessage(AppServerProcess[0].MainWindowHandle, WM_COPYDATA, IntPtr.Zero, iPtrForCdsMsg);

cpu, 메모리 체크

// cpu 사용률, 처음에는 0으로 나옴
PerformanceCounter objCPU = new PerformanceCounter("Processor", "% Processor Time","_Total");
label1.text = objCPU.NextValue();

// wmi 사용
http://www.codeproject.com/csharp/wmi.asp


//메모리 총사용량
Process[] allPro = Process.GetProcesses();
long memory = 0;
foreach (Process pro in allPro)
{
    memory += pro.VirtualMemorySize64;
}  

이 글은 2019-06-01에 작성되었습니다.