파이썬 데몬 만들기

http://cafe.naver.com/cafepython/54

출처: python cookbook p229, Forking a Daemon Process on Unix


pid = os.fork()
if pid > 0:
# exit first parent
sys.exit(0)

#decouple from parent environment

os.chdir("/")
os.setsid()
os.umask(0)

# do second fork
pid = os.fork()
if pid > 0:
sys.exit(0)

#
# daemon business code here
#

이와 관련된 설명은 Advanced Programming In The Unix Environment에서 찾을 있습니다. 모호한 부분을 말씀해 주시면 원문을 올려드리죠. ^^

Daemon Coding Rules(Advanced Programming In The Unix Environment p417)

1. fork() 호출하고 부모를 종료(exit)한다. 작업에는 가지의 이유가 있다.

관련 코드

pid = os.fork()
if pid > 0:
# exit first parent
sys.exit(0)


첫째, 만약 데몬이 명령으로 시작했다면, 부모를 종료(terminate)하는 것은 쉘이 명령이 완료(done)되었다고 생각하게 만든다.

둘째, 자식은 부모의 프로세스 그룹 아이디를 상속받고, 프로세스 아이디를 얻는다. 그래서 우리는 자식이 프로세스 그룹 리더가 아니라는 것을 보장할 있다.

2. 새로운 세션을 생성하기 위해 setsid() 호출한다. 프로세스는 새로운 세션의 세션 리더이자 프로세스 그룹의 리더가 된다, 그리고 컨트롤링 터미널과의 연관이 없어진다.

관련 코드

os.setsid()


3. 루트 디렉토리는 현재 작업 디렉토리를 변경해라. 부모로부터 상속받은 현재 작업 디렉토리는 마운트된 파일 시스템일지도 모른다. 데몬은 시스템이 재부팅될 까지 존재한다, 만약 데몬이 마운트된 파일 시스템에 머문다면, 파일 시스템은 언마운트될 없다. 생략...

관련 코드

os.chdir("/")

4. 파일 모드 생성 마스크를 0으로 설정한다. 상속받은 파일 모드 생성 마스크는 특정한 퍼미션을 허락하지 않고 있을지도 모른다. 만약 데몬 프로세스가 파일을 생성하고자 한다면, 특정 퍼미션으로 설정하기를 원할 것이다. 예를 들어, 만약 그룹 읽기와 쓰기가 가능하도록 파일을 생성하고자 한다면, 파일 모드 생성 마스크는 이들 퍼미션의 마스크를 다를 꺼놔야 것이다.

관련 코드

os.umask(0)

5. 생략...

'파이썬 프로그래밍' 카테고리의 다른 글

TKINTER 요약  (0) 2011.04.24
UltraEdit Python 설정  (0) 2009.06.28
파이썬으로 재귀하향 파서 만들기(2)  (0) 2009.03.02
파이썬으로 재귀하향 파서 만들기(1)  (0) 2009.03.02
파이썬에서 한글쓰기  (0) 2008.11.24

+ Recent posts