반응형

 

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Code/C/CheckProcess

 

   +------+
   | 시작 |
   +------+
      |
   +------------+
   | 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);
}

 

 

 

int main(int argc, char **argv)
{
int pid;
if ((pid = CheckProcess("/tmp/test.pid")) == 0)
{
printf("Damon exe\n");
WritePid("/tmp/test.pid");
while(1)
{
sleep(1);
}
}
else
{
printf("Damon is Exist %d\n", pid);
}
}

 

 

반응형
Posted by 공간사랑
,