2025/5/10
q.icon rustのtokioは、どういうユースケースで使うものなのだろうか?
Q.icon threadとprocessの使い分けや、効果的な使い方などの知識が不足しているな
rustからコマンド起動してprocessを生む方法の1つ
code: rust
let mut child = Command::new("osascript")
.spawn()?;
今回のコマンドはapple scriptの実行だが、まあコマンドはなんでもいい。おそらくshellで実行できるなら。
childが子プロセスの情報だったり操作が詰まってるオブジェクトと見ればいい。
UNIXのプロセス操作方法に則った動きをするだろう。
プロセス管理
親プロセスが生きてる間、子プロセスに勝手に死なれても復活させるような仕組みを持ちたい。
仕様は?
子プロセスをCommandで起動する
その子プロセスを監視し、勝手に終了された場合は再起動する
再起動にも戦略性を持たせて、単純な10sごとにとかじゃなくて、バックオフなどの戦略を試してみる。
親プロセスが明示的に、子プロセスの終了を選んだ時初めて終了する。
親が勝手に死んだ場合も、子プロセスもcleanにkillできるようにしておく
参考になりそうなcrate一覧
プロセス管理の仕組み
https://scrapbox.io/files/681f19109738d870099338ff.png
supervisorの方が包括的なプロセス管理の概念っぽい。
watchdogは1つのプロセス監視の仕組みに見えるような。そうでもないのかな?
プロセスレベルで死んでるのを復活させるなら、名前としてsupervisorを使おう。
そして、pythonプロジェクトで似た思想の設計がある。これは仕様なのかな?実装か?どっちでも良いが参考になる。
俺の中の、supervisorという言葉とそのイメージは合ってそうonigiri.w2.icon
俺がほしい動作のイメージ
子プロセスを生む親プロセスが起動したら、supervisorを作成し、そこから子プロセスを起動する。
supervisorは子プロセスを監視し、子プロセスがクラッシュして落ちたら復活させる。
親プロセスが生き続けてる限り、supervisorはそのプロセスを復活させ続ける。
ただし、親プロセスの命令でこプロセスを別の引数で再起動したいとかの場合は、その要請を受けて、既存プロセスを落としつつ、新しいプロセスを起動する。