teppeilog

ちょっとずつエンジンかかってきた

forkしたプロセスをProcess.kill()するとdefunctが残る

leave a comment

とあるシステムで親プログラムからforkで子プログラムを起動させ、頃合いをみて親プロセスがその子プロセスをkillするという処理を実装した。しかしpsコマンドでプロセスの状態を確認すると、子プロセスで動作させたと思われるプログラムが

defunct ..
defunct ..
defunct ..

と残りまくり。これは何かと訪ねたら調べてたら、どうやら親プロセスでforkして子プロセスを起動すると、親にてProcess.waitを呼ばないとゾンビ(defunct)になってしまうとのこと。

これを回避するには子プロセスに対してProcess.detachを行ってから、Process.killを行う。

例えば

pid = fork do
  何か処理
end

Process.detach(pid)
Process.kill(:INT, pid)

な感じ。

このエントリーをはてなブックマークに追加
はてなブックマーク - forkしたプロセスをProcess.kill()するとdefunctが残る
Share on Facebook

Written by teppei

9月 30th, 2009 at 1:54 am

Posted in プログラミング

Tagged with