죽어도 다시 살아나는 프로세스 만들기?

익명 사용자의 이미지

자식 프로세스를 생성했는데,
파이프를 통해 엉뚱한 명령을 내릴 경우 명시적으로 죽어버릴 경우가 있습니다.
이럴 때 따로 명령을 내리지 않아도 다시 살아나도록 하고 싶은데
spawn process 로 구글 등을 찾아봐도 별 자료가 보이지 않네요.
spawn을 그냥 fork와 비슷한 의미로 쓰는 듯한데..
검색이 잘못된 건가요..?

도움을 얻고 싶습니다.
IBM에는 spawn()이란 함수가 있는 것 같던데
man spawn해보니 없네요 -_-;
rpmfind.net에서 spawn.h(IBM쪽의 파일)을 찾아봐도 없고...

from [ke'izi] where is [r]?

익명 사용자의 이미지

명시적으로 죽은 프로세서를 다시 살리는 방법은 없는 것으로알고 있는데요.
다만 프로세서를 감시하다가 프로세서의 갯수가 모자라면(--;) 다시 하나의
프로세서를 만들 수는 있겠죠.(parent에서 fork()를 이용해서...)

spawn process가 무엇인지 궁금해서 찾아보니 fork()와 비슷한 일을 하는
함수더군요.

http//as400bks.rochester.ibm.com/pubs/html/as400/v5r1/ic2924/index.htm?
info/apis/spawn.htm

어차피 child가 죽으면 그때 가지고 있던 속성들도 사라지니 다시 생성시키는
것이 좋을 것 같네요.

익명 사용자의 이미지

/etc/inittab 에 추가 하세여...
만약 X window 를 기본으로 로그인하게 설정을 하였다면 죽여도 죽여도 다시
살아납니다.
대충 지레짐작으로 그렇게 하면 될것 같은데여..

익명 사용자의 이미지

스스로 그런 일을 하는건 보지 못했구요..
watchdog 이라는 다른 프로세스를 통해서 이런일을 하기도 하는데
원하시는게 맞는지 모르겠네요...

kz wrote..
자식 프로세스를 생성했는데,
파이프를 통해 엉뚱한 명령을 내릴 경우 명시적으로 죽어버릴 경우가 있습니
다.
이럴 때 따로 명령을 내리지 않아도 다시 살아나도록 하고 싶은데
spawn process 로 구글 등을 찾아봐도 별 자료가 보이지 않네요.
spawn을 그냥 fork와 비슷한 의미로 쓰는 듯한데..
검색이 잘못된 건가요..?

도움을 얻고 싶습니다.
IBM에는 spawn()이란 함수가 있는 것 같던데
man spawn해보니 없네요 -_-;
rpmfind.net에서 spawn.h(IBM쪽의 파일)을 찾아봐도 없고...



from [ke'izi] where is [r]?

익명 사용자의 이미지

#!/usr/bin/perl

$pid_file_location = '/var/run/xxx.pid';
$program = 'xxx';
$run_method = '';

fork() && exit();

for (;;) {
$pid = 0;
open(FILE, $pid_file_location) || goto restart;
$pid = ;
close(FILE);
chomp($pid);

$res = kill 0, $pid;
goto restart if ($res == 0);
sleep 60;
next;

restart
if ($pid != 0) {
kill 15, $pid;
sleep 60;
}
system ($program $run_method);
sleep 60;
}

프로그램 실행시 /var/run/xxx.pid 만들고 pid 값을 넣어주면 됩니다.
pid 는 getpid() 아시죠 ?

bind source 에서 참고했고 약간 수정햇습니다.

sun1226의 이미지

스스로 그런 일을 하는건 보지 못했구요..
watchdog 이라는 다른 프로세스를 통해서 이런일을 하기도 하는데
원하시는게 맞는지 모르겠네요...

kz wrote..
: 자식 프로세스를 생성했는데,
: 파이프를 통해 엉뚱한 명령을 내릴 경우 명시적으로 죽어버릴 경우가 있습니
다.
: 이럴 때 따로 명령을 내리지 않아도 다시 살아나도록 하고 싶은데
: spawn process 로 구글 등을 찾아봐도 별 자료가 보이지 않네요.
: spawn을 그냥 fork와 비슷한 의미로 쓰는 듯한데..
: 검색이 잘못된 건가요..?
:
: 도움을 얻고 싶습니다.
: IBM에는 spawn()이란 함수가 있는 것 같던데
: man spawn해보니 없네요 -_-;
: rpmfind.net에서 spawn.h(IBM쪽의 파일)을 찾아봐도 없고...
:
:
:
: from [ke'izi] : where is [r]?

dedcat의 이미지

fork() & exec() 하는것을 spawn이라고 합니다.

vfork()와 비슷합니다.

죽어도 다시 살아난다는 말은 좀 이상한것 같고,

kill signal을 ignore하는게 아닌가요?

lvs, 클러스터링을 알고 싶습니다

choissi의 이미지

init 데몬을 활용하면 될듯 한데요

man init

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

sunyzero의 이미지

보통 fork()모델에서는 그냥 SIGCHLD 를 받으면 조사해서 더 fork()시켜주면 됩니다. 그리고 몇십초당 한번씩 스캔해서 원하는 pool갯수가 아니라면 다시 fork() 시켜주는 것을 해주고 하면 됩니다.(혹은 로드에 따라서 풀갯수를 유연하게 관리하는것도 좋지요.)

PS) 위에 첫글이 "올려짐: 2001년11월23일 2:50 주제: 죽어도 다시 살아나는 프로세스 만들기?" 이렇게 나오는데 2001년에 쓰인글인것 같진 않은뎅... ^^*

========================================
* The truth will set you free.

xfmulder의 이미지

kz wrote:
자식 프로세스를 생성했는데,
파이프를 통해 엉뚱한 명령을 내릴 경우 명시적으로 죽어버릴 경우가 있습니다.
이럴 때 따로 명령을 내리지 않아도 다시 살아나도록 하고 싶은데

일단 엉뚱한 명령을 내려도 죽지않게 해보시고요,
죽더라도 이 프로세스를 다시 respawn 해주도록 /etc/inittab 에 넣어두시면 됩니다. (action 부분에 respawn 이라고 쓰면 됩니다)

차라리 직접 init 와 비슷한 데몬을 하나 짜 보셔도 좋을것입니다.
/etc/inittab 과 비슷한 환경파일을 읽어서 액션부분에 respawn 이라고 쓰여진 프로세스는 죽은다음 SIGCHLD 가 발생해서 조사결과 respawn 이면 다시 fork() ; execl() 시켜주는 구조입니다.
또 SIGHUP 을 받으면 다시 config 파일을 읽어서 없어진 항목을 kill 시키거나 respawn 하는 등의 명령을 수행하는 프로세스 my_init_daemon 을 짜보세요. 생각보다 쉽고 유닉스 시스템 프로그래밍에 엄청난 즐거움을 느끼실 것입니다.

내 자식들도 나처럼 !!

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.