とあるアプリから外部コマンドを実行する機能を実装していたんだけど、ふと気がついたらゾンビプロセスが大量にできていて焦った。 とあるアプリはデーモンプロセスでずっと生きている 外部コマンドは終了を待たなくていいし出力も取らなくていい ゾンビができちゃうダメな実装 とにかく実行すればいいってことで単純に次のようなコードを書いていた。 forkしてexecするだけという至って単純な実装(実際にはSTDOUTを/dev/nullに向けるとか色々あるけど)。 # 外部コマンドを実行する # コマンドの出力とか終了には興味がない def run_command(command) fork do puts "child: pid=#{Process.pid}, ppid=#{Process.ppid}" exec(command) end end puts "app: pid=#{Process.pid