DEV Community

loading...

gen_server で同期的に値を得てからプロセスをシャットダウンする

voluntas profile image voluntas ・1 min read

期待している動作

指定したプロセスに対して処理が終わったら、そのままキレイに死んで欲しい。

結論

handle_call(_Request, _From, State) の戻りに対して {stop, {shutdown, Reason}, Reply, State} とやるだけです。


handle_call(_Request, _From, State) ->
    Reply = ok,
    Reason = spam,
    {stop, {shutdown, Reason} Reply, State};

使いどころなんですが、ほとんどありません。ただ連鎖で死ぬときに、最後にこの処理をして貰ってから死んで欲しい、というときに使うと良いです。

蛇足

なぜこの記事を書いたかというと、この動きが必要な実装がでてきたのですが、値を同期的に戻して stop するという機能が gen_server にあると思っていなかったという、無知をさらすためです。

Discussion

pic
Editor guide