Damon(12) 프로그램을 만들다 보면, 이전에 동일한 프로세스가 떠있는지 확인을 해서, 떠있을 경우 바로 프로그램이 종료되도록 하는 코드를 넣어야할 필요가 있습니다. 이러한 경우 사용가능 한 간단한 함수 입니다. 다음과 같은 프로세스로 작동합니다. 이 코드는 리눅스(12) kernel(12) 2.6에서 테스트되었습니다. 아마도 2.2, 2.4에서도 잘돌아갈 것으로 생각됩니다. +------+ | 시작 | +------+ | +------------+ | Pid | | 파일 체크 | +------------+ | +-----------------------+ Yes | Pid 파일이 존재하는가 | ---------> 종료 +-----------------------+ | NO | +------------------------+ Yes | 해당 PID의 /proc파일이 | --------> 종료 | 존재하는가 | +------------------------+ | NO | +------------------------+ | 자신의 PID로 | | Pid 파일을 덮어씀 | +------------------------+ | | |
코드 #include #include #include #include
int CheckProcess(char *pfile) { FILE *fp; char pid[16]; char process[256]; int rtv = 0;
fp = fopen(pfile, "r"); if (fp == NULL) { return 0; }
if (fgets(pid, sizeof(pid) - 1, fp) == NULL) { fclose(fp); return 0; } fclose(fp);
pid[strlen(pid)-1] = 0x00; sprintf(process, "/proc/%s/exe", pid); if (access(process, F_OK) == 0) { return atoi(pid); } return 0; }
int WritePid(char *pfile) { FILE *fp; char pid[16]; sprintf(pid, "%d
", getpid()); fp = fopen(pfile,"w"); fputs(pid, fp); fclose(fp); }
사용방법 int main(int argc, char **argv) { int pid; if ((pid = CheckProcess("/tmp/test.pid")) == 0) { printf("Damon exe
"); WritePid("/tmp/test.pid"); while(1) { sleep(1); } } else { printf("Damon is Exist %d
", pid); } }
|
총 페이지 수 : 1563
![사이트 맵](http://www.joinc.co.kr/images/browser.png)
![내용 출력 하기](http://www.joinc.co.kr/images/printer.png)
|
고치기 /
찾기 /
쪽 지우기 /
비슷한 쪽
![Valid CSS!](http://www.joinc.co.kr/modules/moniwiki/imgs/vcss.png)
powered by performancing firefox