좀비 프로세스 처리 방법

bigbaby의 이미지

안녕하세요..좀비 프로세스 처리 관련하여 질문드립니다.^^

클라이언트에서 커넥션 갯수 만큼 fork()하여 자식프로세스를 생성하고 있습니다.

중간에 커넥션이 종료되면 자식프로레스는 종료가 되고, 다시 fork()하여 재접속하도록 구현되어있습니다.

부모 프로세스는 SIGCHLD 시그널에 대해 아래와 같이 시그널 핸들러를 설치하였습니다.

while (waitpid(-1, NULL, NOHANG) > 0){}

부모 프로세스가 종료되어야 할 상황이 발생하여 모든 자식 프로세스에 종료 시그널을 날렸고,

자식이 종료되어, SIGCHLD 시그널을 받아, 처리해주었습니다.

이때, 모든 자식 프로세스 갯수만큼 SIGCHLD 시그널을 받기 전에(종료 대기시간 초과),

exit(1) 를 호출하여 부모가 종료되어야 하나 hang이 걸리는 상황이 발생하였습니다.

strace로 확인해보니 아래와 같이 출력되었습니다.

futex(0x9ca8e88, FUTEX_WAIT_PRIVATE, 2, NULL)

1. exit(1)호출시에 위처럼 행이 걸리는 이유는 무엇인지 궁금합니다.
혹시 exit()함수 호출시 SIGCHLD 시그널을 받아서 그런건지...

2. 위 처럼, 모든 자식에 대해 waitpid를 호출하여 정리해주지 않아도 문제 없는지 궁금합니다. ㅠㅠ

toc21c의 이미지

저도 futex 에서 더이상 진행이 않되는 문제를 겪고 있습니다.
정확한 이유는 몰라서 일단 회피하는 쪽을 택했습니다.
저같은 경우는 자식프로세스들에서 동시, 또는 한번에 kill로 자신을 종료 시그널을 보내고, 부모쪽에서 SIGCHLD 핸들러로 처리하니까
위와 같은 문제가 나오더군요. 제 개인적인 생각에는 시그널핸들러 처리가 끝나기도 전에, 혹은 동시에 시그널을 받아서 처리를 못하거나,
혹은 signal쪽 함수들 내부에 futex 락 매커니즘이 들어가 있어서 그런거 아닌가 합니다.
그래서 일단 nanosleep(sleep은 시그널에 또 위험할까싶어서;;) 으로 자식들이 자신을 kill 하기전에 뜸(?)을 줘서 테스트 중입니다.

혹시 질문하셨던 분이나 다른 해결방법으로 해결하신 분 계시면 의견을 듣고 싶습니다.

댓글 달기

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