Damon(12) 프로그램을 만들다 보면, 이전에 동일한 프로세스가 떠있는지 확인을 해서, 떠있을 경우 바로 프로그램이 종료되도록 하는 코드를 넣어야할 필요가 있습니다. 이러한 경우 사용가능 한 간단한 함수 입니다. 다음과 같은 프로세스로 작동합니다.
이 코드는 리눅스(12) kernel(12) 2.6에서 테스트되었습니다. 아마도 2.2, 2.4에서도 잘돌아갈 것으로 생각됩니다.
+------+ | 시작 | +------+ | +------------+ | Pid | | 파일 체크 | +------------+ | +-----------------------+ Yes | Pid 파일이 존재하는가 | ---------> 종료 +-----------------------+ | NO | +------------------------+ Yes | 해당 PID의 /proc파일이 | --------> 종료 | 존재하는가 | +------------------------+ | NO | +------------------------+ | 자신의 PID로 | | Pid 파일을 덮어씀 | +------------------------+ | | |
코드
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>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\n", getpid()); fp = fopen(pfile,"w"); fputs(pid, fp); fclose(fp);}
'UNIX_LINUX_C_C++' 카테고리의 다른 글
[공유메모리] 큐 구성을 통한 효과적인 데이터 처리 프로세스 구현 (0) | 2011.10.16 |
---|---|
[펌] C언어로 작성된 코드 모음 (0) | 2011.10.16 |
[펌] fcntl 을 이용한 파일제어 (0) | 2011.10.16 |
[펌] 전송 프로토콜 [RTP/RTCP(RFC1889, RFC1890), RSVP, RTSP] (0) | 2011.10.16 |
[펌] 알고리즘 분석 (0) | 2011.10.16 |