みつけたのでソースコードを読んでみたら、かなり参考になった。
51行目
resourceモジュールを使っているのを見るのははじめてだ。
for fd in range(resource.getrlimit(resource.RLIMIT_NOFILE)[0]): try: os.close(fd) except OSError: pass
57行目
dupすると未使用の中で最小のディスクリプタに割り当てられんのか。
os.open(devnull, os.O_RDWR) os.dup(0) os.dup(0)
85行目
signal.signal(signal.SIGTERM, partial(sigterm, pid))
部分関数使っている。ドキュメントによるとsignal.signalの第二引数は
handler は二つの引数とともに呼び出されます: シグナル番号、および現在のスタックフレーム (None またはフレームオブジェクト
で、部分関数になっているsigtermは以下のように3引数を受け取る関数。第一引数はロックファイル名。
def sigterm(pid, signum, frame): logging.info("Caught signal %d. Stopping daemon." % signum) os.remove(pid) sys.exit(0)