Ractorで歌ってみましょう。
歌う部分はRactorは関係ありません。出落ちです。 Ractor内で、spawnしたプロセスをメインスレッドでkillできるか確認します。
非同期なspawn関数をRactor内で実行する必要があるのかは知りません。
完成形
LYRICS =<<FIN ちょうちょう ちょうちょう 菜の葉にとまれ 菜の葉にあいたら 桜にとまれ 桜の花の 花から花へ とまれよ遊べ 遊べよとまれ FIN .gsub("\n", ' ') .freeze pid = Ractor.new { spawn "say #{LYRICS}" }.take sleep 10 Process.kill 9, pid
pidは数値なので、Ractorと共有可能です。
共有可能なオブジェクト
文字列は共有可能なオブジェクトではありません。 Ractorから参照するとNameErrorが起きます。 freezeして共有可能なオブジェクトにします。