C#
Mutex를 이용한 프로세스 통제

실행파일을 여러 번 실행하면 여러 개의 다른 프로세스들이 생성되는데, 만약 해당 머신에서 오직 한 프로세스만 실행되도록 하길 원한다면, 일반적으로 사용되는 한 방법으로 Mutex를 사용할 수 있다. Mutex는 프로세스간 동기화(Synchronization)을 위해 사용되는데, .NET Framework에는 System.Threading.Mutex라는 클래스에서 구현되어 있다.




단일 프로세스만 실행 예제

아래는 머신에서 오직 한 프로세스만 사용하기 위한 예제이다. 머신 전체적으로 한 프로세스만 뜨게 하기 위해, 고유의 Mutex명을 체크할 필요가 있는데, 이를 위해 GUID (globally unique identifier)를 사용하였다. 처음 프로세스가 먼저 Mutex를 획득한 후에는, 그 프로세스가 죽기 전에는 머신 전체적으로 다른 프로세스가 Mutex를 획득할 수 없다는 점을 이용하여 잠시 (1초) 체크해 보고 이미 다른 프로세스가 Mutex를 가지고 있으면, 프로세스를 중지하게 된다.

예제

static class Program
{
   [STAThread]
   static void Main()
   {
      // GUID를 뮤텍스명으로 사용
      string mtxName = "4AD31D94-659B-44A7-9277-1DD793E415D1";
      Mutex mtx = new Mutex(true, mtxName);

      // 1초 동안 뮤텍스를 획득하려 대기
      TimeSpan tsWait = new TimeSpan(0, 0, 1); 
      bool success = mtx.WaitOne(tsWait);         

      // 실패하면 프로그램 종료
      if (!success)
      {
         return;
      }

      // 성공하면 폼 실행
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(new Form1());
   }
}



본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.




Comment lovendon@*** 8/19/2015 6:13:35 AM
Comment admin@*** 8/19/2015 1:39:43 PM
Comment lovendon@*** 8/20/2015 6:19:37 AM
Comment admin@*** 8/20/2015 12:14:15 PM
Comment powwe2@*** 7/25/2016 7:54:29 AM