問題
Sucker Punch を使っているアプリ内で、Kernel.#fork
を使うと何故かすべてのキューが終了してしまった。
原因
Sucker Punch がキューのシャットダウンを at_exit
に書いており、
Kernel.#fork
で作成した子プロセスが終了すると at_exit
が実行されることが原因だった。
対応
Kernel.#exit!
のドキュメントに書いてあった。
exit! は exit とは違って、例外処理などは一切行ないません。 Kernel.#fork の後、子プロセスを終了させる時などに用いられます。
pid = fork do
# 子プロセスの処理
exit!
end
Process.waitpid(pid)
fork
や at_exit
のドキュメントに書かれていなかったので結構彷徨ってしまった…。