프로세스 중복 방지

6723 단어 cppcpp

내가 만든 프로그램을 하나의 컴퓨터당 하나의 프로세스만 동작하려면 어떻게 해야할까? 동일한 프로세스를 중복으로 실행시키는 것을 방지해보자

개발 중에 '하나의 프로세스만 동작하게 해주세요'라는 요청이 있었다. 그래서 나는 인터넷 검색을 해보았고 stack-overflow에 좋은 방법을 찾아냈다.

해당 방법은 파일락을 이용해서 최초의 프로세스 생성시 생성된 파일을 lock하여 후에 동일한 프로세스가 실행되더라도 이를 방지하는 방법이다.

stack-overflow 찾은 방법을 예제로 만들어보았다.

#include <iostream>
#include <sys/file.h>
#include <unistd.h>
#include <string>
using namespace std;

int main() {

    // pid를 담는 파일 생성
    const char* fileName = "/home/bong/Desktop/work/anyapi/only_one_process.pid";
    FILE* file = fopen(fileName, "w+"); // 무조건 새로 만들기

    if(file){
        std::cout << "file open" << std::endl;
        string str_pid = std::to_string(getpid());

        fwrite(str_pid.c_str(), 1, str_pid.size(), file);
        fflush(file);

    }
    fclose(file);

    int pid_file = open(fileName, O_CREAT | O_RDWR, 0666);  // 0666 : file
    int rc = flock(pid_file, LOCK_EX | LOCK_NB);
    if(rc) {
        if(EWOULDBLOCK == errno){
            // another instance is running
            std::cout << "other program is running" << std::endl;
            exit(EXIT_FAILURE);
        }

    }

    // this is the first instance
    std::cout << "Hello, World!" << std::endl;
    sleep(60);

    return 0;
}

좋은 웹페이지 즐겨찾기