[질문] 프로세스 관련

PhuketDay의 이미지

안녕하세요

궁금한점이 있어 이렇게 글로 질문 드립니다

1.프로세스 관리 프로그램에서 관리하고 있는 프로세스가 죽어있을때 해당 프로세스를 실행시켜주려면 어떻게 해야되나요

void ServiceRestart(int nPid,char *strPath)
{
kill(nPid,9);
execl(strPath,strPath,NULL);
}

여기서 execl 를 이용하여 해당 프로세스를 실행하게 되면 관리 프로그램에다가 새로운 프로세스를 실행시켜서 관리프로그램은

죽어버리는 현상이 벌어지게 되는데 관리 메인 프로세스는 살아있는상태에서 새로운 프로세스를 실행하려면 어떤 함수를 이용해야되는지

궁금 합니다

2. 해당 프로세스 아이디를 얻어오는 함수에 대한 궁금한 사항

자신의 프로세스 아이디를 얻어오려면 getpid() 를 하면 되는데 예를들어 test1 이라는 프로그램의 프로세스 아이디를 얻어오려면 어떻게 해야되나요 ?

해당 프로세스 경로와 파일명만 알고 그 파일명이 실행되어있는지 판단하여 재시작 시켜주기 위해서인다

해당 프로세스를 죽이려면 kill(pid,9) 를 해야되는데 해당 프로세스 아이디를 구해와야 되서요

아시는분 답변 부탁드립니다

좋은 하루 되세요~

ssehoony의 이미지

1. 관리프로세스를 fork 한 다음 자식을 execl 등을 이용해서 실행하세요.

2. /proc 에 보면 pid 를 기준으로 프로세스 정보가 있습니다.
모든 pid 를 쭉~ 검사해서 원하는 프로그램(ex test1)을 찾는 방법도 있고요
공유메모리를 이용해서 test1 이 실행되면서 스스로 공유메모리에 자신의 pid 를 기록하는 방법도 있습니다.
전자의 경우는 우연히 다른 프로그램이 동일한 프로세스명을 갖게 된다면 낭패죠.
해야 할 일이 늘어날지 모르겠지만 후자를 추천합니다.
후자의 경우 프로세스가 종료 될때 공유메모리에서 자신의 pid 를 제거하는 것도 잊지 마시고요.

모지리의 이미지

제가 그런거를 만들어 사용하고 있는데요.

흠.. 일단 고려해야될 사항이 무척이나 많습니다. 단순히 1-2개 정도만 하실거면
상관없지만 제가 원했던 사양처럼 범용적으로 사용할려면 조금 머리가 아픕니다. 일단
각설하고 한번 들어가보죠.

1. 관리 프로세서가 마스터로 떠서 관리한다. 이것은 inittab에 등록되어 있다.

2. 프로세스 실행후 PID 파일로 기록하고 실행 유형을 결정한다.

3. 실행 유형 구분
3-1. 포어그라운드로 실행하는 프로그램
3-2. 백그라운드로 실행되어 PID가 변경되는 프로그램

4. 실행 및 감시 유형
4-1. 한번 실행하고 잊어 먹기
4-2. 실행하고 일정한 주기로 감시하면서 죽었을때 재실행.
4-3. PID 파일을 이용해 감시하기.

5. 재 실행및 감시
5-1. 죽으면 즉시 재실행
5-2. 죽을때 한참 시간이 걸리는 유형
5-3. 죽일때 특별한 작업을 끝마치고 죽는 유형

대충 지금 생각나는 정도도 이정도이고요. 좀더 생각하면 무지 많아 집니다요. 쩝..

하튼 그렇구요. 감시 유형은 다양합니다. 저의 경우는 PID파일을 열어서 감시하는 방법
하고 공유메모리에 저장해놓고 감시하는 방법등 몇가지 방법을 혼용해서 사용했습니다.

질문 하신 내용처럼 해당 프로세스를 죽일때 KILL -9 PID 방식으로는 문제가 생길수도
있습니다. TERM을 주어야 할지 어찌 해야 될지 각 프로그램 방식에 맞추어 주셔야 될겁니다.

단순히 실행 감시 정도의 기능이라면 상관없지만 좀 안정적으로 범용성을 가질려면 고민을 좀
해보셔야 될겁니다.

행운을 빌어요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.