프로세스 찾아서 지우고 실행하기




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























  • Web


    joinc













    사이트 맵
    내용 출력 하기
    위키 도움말




     고치기 / 찾기 / 쪽 지우기 / 비슷한 쪽 Valid XHTML 1.0!

    Valid CSS!

    powered by performancing firefox




    'develop > dogvelop' 카테고리의 다른 글

    [리눅스] sleep & usleep  (0) 2006.11.29
    [리눅스] 현재 시간을 자신이 원하는 포맷으로 출력하기  (0) 2006.08.22
    데몬 프로그램 만들기  (0) 2006.08.21
    Arm Assemble  (0) 2006.06.29
    API & SDK  (0) 2006.06.28