부모프로세스가 죽을때 자식도 알아서 죽는 멋진 방법?

김충길의 이미지

부모프로세스가 죽을때 자신이 죽는다는걸 모르는 상황입니다.
그냥 폴트 나서 죽는건데 있대 그 자식을 자동으로 죽이는
방법이 있을까요?

이전에 쓰던 방법은 자식들이 자기의 부모가 init으로 되면
지금 내 부모 프로세스가 죽었구나 해서 스스로 죽는 식이었는데
이것보다 괜찮은 방법이 있을까요?

버그소년의 이미지

단순히 죽이기만 하는거라면 시그널 핸들을 등록해서 kill()로 죽이면

될듯 합니다.

폴트 나면 핸들에서 저장된 자식들에게 kill ( pid, SIGUSR1 )

이렇게 사용자 시그널이나 기타 다른 시그널을 날려서 자식을 죽게

하면 큰 무리가 없을 듯 합니다.[/list][/list]

가끔은 밥을 굶어도 살 수 있다.

zienie의 이미지

자식 fork 하기전에 자식과 부모간에 PIPE를 열어두고
일정 간격으로 그 파이프 체크하는 간단한 방법도 있습니다.

부모가 죽는다면 파이프를 열어놓은 방식에 따라
자식이 파이프를 억세스 하려할때
읽기 혹은 쓰기 오류가 발생하겠죠.

또 다른 방법으로는 다른 데콘 프로세스들 처럼
some_daemon.pid 파일을 만들어 두고
부모 프로세스가 계속 touch 해서 시간을 바꿔놓고
자식들은 그 파일 변경 시간을 검사해서 일정 시간동안
변경이 되지 않으면 부모프로세스가 죽었다는걸 알 수도 있겠죠.

방법은 무궁무진하니....연구해보시기 바랍니다... :lol:

##########################################################
넘어지는건 아직 괜찮다.
하지만 넘어질때마다 무언가를 주워서 일어나자.

winchild의 이미지

없습니다. :evil:

가장 좋은 방법은 부모가 죽을때 자식을 모두 죽이고 죽는 법이 가장 확실한 방법입니다. 그것이 가능하게 한는 방법은 SIGNAL 을 이용하는 방법입니다.

특히 자식프로세서를 죽이기 위하여 이용하는 것이 SIG_CHILD 를 이용합니다. 개론적인것은 부모가 자식을 만들때 자식의 PID 를 가지고 있다가 부보가 죽어야 할 상황에 이르면, 자식에게 KILL 을 날립니다. 자식이 죽으면 SIG_CHILD 시그널이 발생하므로 죽은 줄 알고 자기도 돌아가십니다.

말로는 쉬운데 구현하기 꽤 까다롭습니다. 머리를 많이 쓰셔야 할겁니다. 스티븐스의 NETWORK PROGRAMMING 에 보면 구현된것이 있었던 것으로 기억합니다.

- 겨울아찌 -

- 겨울아찌 -
winchild@gmail.com

analyzer의 이미지

겨울아찌가 정답입니다.

프로세스를 생성할때 pid를 보관하고 있다가 생성된 pid 로 kill 시스널을 보내면 됩니다.

단!

패어런트 프로세스가 정상적으로 동작하지 못할때를 대비해서.. 패어런트를 감시하는 와치독 프로세스가 하나더 있으면 좋을듯 합니다.
:( :shock:

ㅡ,.ㅡ;;의 이미지

부모프로세스가 자신이 죽는다는걸 모른다구요..?

그렇다면 kill() 을 사용할수는 없겠죠..
언제 죽는지도 모르는데 kill() 을 실행하라는건 말이안되니까요..

그럴때 위에서 파이프나 파일을 이용한방법등도 있는데
세마포어를 사용할수도 있습니다.

저같으면 세마포어 사용합니다. 부모프로세스가 시작할때 1로 셋팅할때
SEM_UNDO 로 셋팅하면 되겠죠..


----------------------------------------------------------------------------

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.