ITSUKI.
技術731 文字2 分

Day 11|exec — コマンドが OS のプロセスになるまで

#Codex#ソースコードリーディング#図解

この章しょうの答こたえ

コマンドの文字列もじれつを、起動条件きどうじょうけん・実行中じっこうちゅうの状態じょうたい・終了しゅうりょう結果けっかに分わけて追おう。

git status は短みじかいコマンドですが、実行じっこう場所ばしょが違ちがえば結果けっかも変かわります。exec を読よむときは、コマンド本体ほんたいだけでなく、作業さぎょうディレクトリ、入出力にゅうしゅつりょく、実行時間じっこうじかんをまとめて見みる必要ひつようがあります。

01|図でつかむ

図11|exec

短みじかい処理しょりは終了しゅうりょう結果けっかを返かえす。長ながい処理しょりでは、継続中けいぞくちゅうのセッションを扱あつかう必要ひつようがある。

02|3つのポイントで理解する

1. 引数には実行環境も含まれる

ExecCommandArgs から要求ようきゅうへ変換へんかんする部分ぶぶんを見みます。同おなじコマンドでも cwd や環境変数かんきょうへんすう、タイムアウトなどが違ちがえば挙動きょどうは変かわるため、一緒いっしょに記録きろくします。

2. 実行中のプロセスを管理する

UnifiedExecProcessManager 周辺しゅうへんを読よむと、起動後きどうごの状態じょうたいをどこで持もつかを追おえます。write_stdin のような後続こうぞく操作そうさが、どの実行じっこうセッションを対象たいしょうにするかにも着目ちゃくもくします。

3. 出力と終了は別々に確認する

標準出力ひょうじゅんしゅつりょくが返かえってきても、プロセスが終おわったとは限かぎりません。終了しゅうりょうコード、実行中じっこうちゅうの識別子しきべつし、打ち切うちきりや出力しゅつりょく省略しょうりゃくの情報じょうほうを組み合くみあわせて判断はんだんします。

03|ソースで確かめる

以下いかの検索けんさくは Codex リポジトリのルートで実行じっこうします。最初さいしょに対象たいしょう commit を記録きろくし、検索結果けんさくけっかから定義ていぎと呼び出よびだし元もとを一ひとつずつ開ひらいてください。

git rev-parse --short HEAD
rg -n "ExecCommandHandler|ExecCommandRequest" codex-rs

読よむ入口いりぐち: codex-rs/core/src/tools/handlers/unified_exec/exec_command.rs 。リンク先さきは照合しょうごうに使つかった固定こてい commit のファイルです。手元てもとの版はんと異ことなる場合ばあいは、上うえの検索語けんさくごから探さがし直なおします。

小さく試す

短みじかい読み取よみとりコマンドの要求ようきゅうと結果けっかを観察かんさつし、cwd・出力しゅつりょく・終了しゅうりょうコードを並ならべて記録きろくします。

04|30秒で復習

  • コマンドと環境かんきょうを一組ひとくみで読よむ。
  • 継続中けいぞくちゅうのプロセスには状態じょうたい管理かんりが必要ひつよう。
  • 出力しゅつりょく受信じゅしんと実行じっこう完了かんりょうを区別くべつする。

全ぜん30章しょうの目次もくじへ