なかだです。

At Fri, 20 Feb 2004 19:54:37 +0900,
Takahiro Kambe wrote in [ruby-dev:22991]:
> > > (簡易版ということではProcess.daemon とかあると嬉しいのでしょうか?)
> > 
> > どういう風に使うんでしょうか。 Process.daemon だけでforkして
> こっちです。daemon(3)を想定しています。
> 
> 	http://netbsd.gw.com/cgi-bin/man-cgi?daemon+3
> 
> 同ライブラリ関数で行っている内容は、
> 
> 	1. fork()を実行
> 	2. fork()できたら親のプロセスは _exit(0)
> 	3. 子のプロセスは、
> 		3.1 setsid()を実行
> 		3.2 引数nochdirが0でないなら、/ にchdir()
> 		3.3 引数nocloseが0でないなら、/dev/null をオープンして、
> 		    標準入力、出力、エラー出力を置き換え
> 
> といったことです。1.や3.1が失敗すると、エラーで戻ります。

こんな感じですか。

  def Process.daemon(chdir = true, close = true)
    if pid = fork
      if block_given?
        return pid
      else
        exit!
      end
    end
    setsid
    Dir.chdir("/") if chdir
    [STDIN, STDOUT, STDERR].each {|io| io.reopen("/dev/null")} if close
    yield if block_given?
  end


> > daemon状態? それとも Process.daemon {} でブロックの中だけ?
> daemon状態になったものは戻ってこれませんので。

forkみたいに、子プロセスのdaemon化とか。

いずれにせよ、builtinじゃなくてもpure rubyで実装できそうな気が
します。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦