ObjectSpace.#define_finalizer

ソースリーディングしているGemの中で、接続開始したタイミングでセッションをkillするスクリプトがあったのをきっかけに調べた。

https://docs.ruby-lang.org/ja/latest/method/ObjectSpace/m/define_finalizer.html

class Foo
  def Foo.callback
    proc {
      puts 'bar'
    }
  end

  def initialize
    ObjectSpace.define_finalizer(self, Foo.callback)
  end

  def hoge
    puts 'hoge'
  end
end

Foo.new
Foo.new.hoge
$ ruby define_finalizer_sample.rb

hoge
bar
bar

そのオブジェクトが解放されたタイミングで実行される処理を登録することができる。読んだソースの中では、先の通りセッションを開いたタイミングで対象のpidを指定してセッションのkillを予約している構造になっていた。


Buy Me A Coffeeikuma-tにお恵みを!