프로세스 중복 방지
내가 만든 프로그램을 하나의 컴퓨터당 하나의 프로세스만 동작하려면 어떻게 해야할까? 동일한 프로세스를 중복으로 실행시키는 것을 방지해보자
개발 중에 '하나의 프로세스만 동작하게 해주세요'라는 요청이 있었다. 그래서 나는 인터넷 검색을 해보았고 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;
}
Author And Source
이 문제에 관하여(프로세스 중복 방지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pgb0908/프로세스-중복-방지저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)