여러 이유로 실행파일이 동시에 여러 개 실행되지 않도록 하는 방법은 윈도우즈에서는 MUTEX 등을 이용해서 간단히 구현해서 사용하고 있었습니다.

이번 프로젝트에서 리눅스 플랫폼도 지원해야 해서, 리눅스 쪽에서 방법을 찾고 있었는데, 네임드 세마포어로 해결했습니다.

sem_open을 이용해서 네임드 세마포어를 만들고 이걸 검사해서 이미 존재하면 종료하도록 구현했습니다.

BOOL IsRunning()
{
    BOOL ret = FALSE;

    gRunning = sem_open(MY_SEMAPHORE, O_CREAT | O_EXCL, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH, 1);

    if(gRunning == SEM_FAILED)
    {
        if(errno == EEXIST)
        {
            ret = TRUE;
        }
    }

    return ret;
}

생성된 네임드 세마포어는 프로그램 종료시 삭제하면 됩니다.
if (gRunning != NULL)
{
    sem_close(gRunning);
    sem_unlink(MY_SEMAPHORE);
}


+ Recent posts