여러 이유로 실행파일이 동시에 여러 개 실행되지 않도록 하는 방법은 윈도우즈에서는 MUTEX 등을 이용해서 간단히 구현해서 사용하고 있었습니다.
이번 프로젝트에서 리눅스 플랫폼도 지원해야 해서, 리눅스 쪽에서 방법을 찾고 있었는데, 네임드 세마포어로 해결했습니다.
sem_open을 이용해서 네임드 세마포어를 만들고 이걸 검사해서 이미 존재하면 종료하도록 구현했습니다.
생성된 네임드 세마포어는 프로그램 종료시 삭제하면 됩니다.
이번 프로젝트에서 리눅스 플랫폼도 지원해야 해서, 리눅스 쪽에서 방법을 찾고 있었는데, 네임드 세마포어로 해결했습니다.
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); } |