크론으로 실행시 좀비가 생겨요...
글쓴이: 나빌레라 / 작성시간: 월, 2003/09/22 - 5:12오전
파이썬으로 데몬프로그램을 만들었습니다.
(뭐 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() if pid < 0 : sys.exit(1) elif pid != 0 : sys.exit(0) os.chdir("/") os.setsid() </code> 위는 파이썬에서 데몬 만들어주는 코드입니다. 어떻게 해야 저놈의 좀비가 안생길까요? (해결이 안되 밤새고 있는중...) C와 코드가 비슷하니.. C 코드로 답변해 주셔도 상관없습니다... 그럼 답변해주시는 분들께 미리 감사드립니다.
Forums:
zombie는 아시다시피 parent 프로세스에서, child proce
zombie는 아시다시피 parent 프로세스에서, child process사망시에 발생하는
SIGCLD(sig child)에 대한 핸들러를 달아주지 않아서 발생합니다.
부모 프로세스에는 signal중 SIGCLD에 대한 핸들러를 달아주세요.
그럼 원하시는대로 됩니다.
아니면, 권장사항은 아니지만, 부모에서 child 사망 signal(SIGCLD)를
무시하게 해주던가요.(SIG_IGN)
signal(SIGCLD, SIG_IGN);
대략 이러합니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기