크론으로 실행시 좀비가 생겨요...

나빌레라의 이미지

파이썬으로 데몬프로그램을 만들었습니다.
(뭐 C랑 별차이 없더군요..)

그런데 그냥 쉘에서 실행시키면 데몬으로 잘 작동하는데,
이놈이 cron 에 의해서 실행되면 cron 밑으로 python 이 좀비로 하나 남고,
데몬이 뜨네요... 데몬의 동작과는 상관이 없지만, 그래도 좀비가 있으니 거슬리네요.. (분명 없앨 수 있을것 같은데..)

이건 그냥 쉘에서 실행했을때,

maanu:~# /home/maanu/project/msn-bot/maanu_msn.py 
maanu:~# ps -ef
<윗부분생략>
www-data  3520  3039  0 00:08 ?        00:00:00 /usr/sbin/apache
root      5199   279  0 04:49 ?        00:00:00 sshd: root@pts/1
root      5201  5199  0 04:49 pts/1    00:00:00 -bash
mysql     5290   263  0 05:08 ?        00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/va
root      5291     1  0 05:08 ?        00:00:00 python /home/maanu/project/msn-bot/maanu_msn.py
root      5294  5201  0 05:08 pts/1    00:00:00 ps -ef

pid 5291 이 데몬프로그램입니다.

이건 크론이 실행했을때

root      5201  5199  0 04:49 pts/1    00:00:00 -bash
root      5281   297  0 05:01 ?        00:00:00 /USR/SBIN/CRON
root      5282  5281  0 05:01 ?        00:00:00 [python] <defunct>
mysql     5283   263  0 05:01 ?        00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/va
root      5284     1  0 05:01 ?        00:00:00 python /home/maanu/project/msn-bot/maanu_msn.py
root      5286  5201  0 05:07 pts/1    00:00:00 ps -ef

아래쪽 인용을 보면 pid 가 5282 인

 이 좀비가 되어 버림니다. 그리고 5281로 나오는 /USR/SBIN/CRON 도 죽지않고 계속 떠있고요... 이거 무지하게 없애버리고 싶습니다...-_-;
 
데몬만드는 코드
<code class="bb-code">
pid = os.fork&#40;&#41;
if pid &lt; 0 &#58;
        sys.exit&#40;1&#41;
elif pid != 0 &#58;
        sys.exit&#40;0&#41;
 
os.chdir&#40;&quot;/&quot;&#41;
 
os.setsid&#40;&#41;
</code>
 
위는 파이썬에서 데몬 만들어주는 코드입니다.
 
어떻게 해야 저놈의 좀비가 안생길까요?
(해결이 안되 밤새고 있는중...)
 
C와 코드가 비슷하니.. C 코드로 답변해 주셔도 상관없습니다...
 
그럼 답변해주시는 분들께 미리 감사드립니다.
mach의 이미지

zombie는 아시다시피 parent 프로세스에서, child process사망시에 발생하는
SIGCLD(sig child)에 대한 핸들러를 달아주지 않아서 발생합니다.
부모 프로세스에는 signal중 SIGCLD에 대한 핸들러를 달아주세요.
그럼 원하시는대로 됩니다.
아니면, 권장사항은 아니지만, 부모에서 child 사망 signal(SIGCLD)를
무시하게 해주던가요.(SIG_IGN)
signal(SIGCLD, SIG_IGN);
대략 이러합니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

댓글 달기

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