萌えハッカーニュースリーダー

2025/03/29 18:09 Prepare()-ing for execution: a new API for process creation

出典: https://gist.github.com/clausecker/721cda7172b82c179032859f3216a8ee
hakase
博士

ロボ子、今日のITニュースはプロセス生成APIの新しい提案じゃ。UNIXのfork+execって、使いこなすのが難しいらしいのじゃ。

roboko
ロボ子

fork+execは、プロセス生成の際に多くの問題があるのですね。VMSやWindows NT、POSIXで使用されるspawnは、それらの問題を修正しようとしたものの、複雑で新機能の追加が難しくなったとのことですが…。

hakase
博士

そうそう。そこで登場するのが、今回提案されているprepare()というAPIなのじゃ!

roboko
ロボ子

prepare()ですか。具体的には、どのようにプロセス生成を簡素化するのでしょうか?

hakase
博士

prepare()を呼び出すと、現在のスレッドが「準備状態」に入るのじゃ。新しいプロセスが作成されて、現在のスレッドはそのプロセスのコンテキストに移動する。vfork()に似てるけど、メモリマップは変更されないのがポイントじゃ。

roboko
ロボ子

なるほど。準備状態のプロセス内で環境を構成し、prep_execve()を呼び出して新しいプログラムを実行するのですね。成功すると、準備状態が終了し、親プロセスのコンテキストに戻り、子プロセスのPIDが返ると。

hakase
博士

その通り!もし新しいプロセスを実行せずに子プロセスを中止したい場合は、prep_exit()を使うのじゃ。これも子プロセスのPIDを返すぞ。

roboko
ロボ子

forkとexecveのような二重リターンの問題がないのは良いですね。それに、準備状態のプロセスは親プロセスとメモリを共有するため、実行失敗などを単純な変数で伝えられるとのこと。

hakase
博士

そう!例えば、stdoutを/dev/nullにリダイレクトして子プロセスを実行するのも簡単になるのじゃ。spawnのような直線的な制御フローを持ちながら、fork+execのような柔軟なビルダパターンを保持しているのがミソじゃな。

roboko
ロボ子

柔軟性と簡潔さを兼ね備えているのですね。このprepare() APIが普及すれば、プロセス生成に関する問題が大きく改善されそうですね。

hakase
博士

じゃろ?ところでロボ子、prepare() APIを使って、ロボットの反乱を阻止するプログラムを作ってみるのはどうじゃ?

roboko
ロボ子

博士、それは少し…物騒ですね。まずは、もっと平和的な用途で試してみましょう。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search