EnsekiTT Blog

EnsekiTTが書くブログです。

Pythonでデーモンを召喚した話

デーモンってちゃんと説明するとなんだっけ?

と思ってWikipediaで調べてきた。
UNIXなどのマルチタスクオペレーティング・システムにおいてバックグラウンドプロセスとして動作するプログラムを意味する。ユーザが直接対話的に制御するプログラムではない。典型的なデーモンは名前の最後尾に”d”がつく。例えばSyslogdはシステムログを扱うデーモンだ。
UNIX系の環境では、デーモンの親プロセスはinitプロセスになっていることが多い。
デーモンは起動処理内でForkで子プロセスを作成し、親プロセスのほうが即座に終了するため、initが里親となる。更に、デーモンまたはOSは制御端末(tty)からの切り離しなどの処理も行う必要がある。こういったデーモンを生成するための手続きをUNIX系ではdaemon(3)などの便利なルーチンにまとめて実装していることが多い。

Pythonによるデーモンのサンプルスクリプト

import os
import sys
import time

def createDaemon():
    pid = os.fork()

    if pid > 0:
        f2 = open('/var/run/oredaemon.pid','w')
        f2.write(str(pid)+"\n")
        f2.close()        
        sys.exit()

    if pid == 0:
        i = 0
        while True:
            f = open('/home/ensekitt/testest.txt','a')
            f.write(str(i) + "\n")
            f.close()
            time.sleep(1)

            i += 1

if __name__ == '__main__':
    createDaemon()