Skip to content
Latchkey

processとは何か?実行中のプログラムの解説

processは実行中のプログラムのインスタンスで、独自のメモリ、file descriptor、環境を持ち、オペレーティングシステムによって管理されます。

プログラムはディスク上のただのファイルですが、processはオペレーティングシステムがそれをロードして実行したときに得られるものです。CIスクリプト内の各コマンドはprocessになります。独自のメモリを得て、親から環境を継承し、終了時にexit codeを報告します。このモデルはshellが行うほぼすべてのことの基盤です。

プログラムとprocess

プログラムは静的なファイルであり、processはその生きた実行中のバージョンです。同じプログラムを何度も実行でき、それぞれが独自の状態を持つ別々のprocessになります。

processが持つもの

  • 独自のメモリ空間(heapとstack)。
  • stdin、stdout、stderrを含む、開かれたfile descriptorのセット。
  • 継承した環境変数のコピー。
  • OSが追跡に使うprocess ID (PID)。

親と子

processはツリーを形成します。shellがコマンドを実行すると、shellの環境を継承する子processを作成します。子は終了時に親へexit codeを返します。

processの終わり方

processは、正常に終了してexit codeを返すか、停止させるsignalを受け取ることで終わります。いずれの場合も、OSがそのメモリとリソースを回収します。

CIにおけるprocess

ステップ内の各コマンドはprocessです。メモリとCPUの制限はprocessごとに適用されるため、大きくなりすぎたbuild processはOSによって殺されることがあり、遅いステップではなく失敗したステップとして現れます。

マネージドrunnerでのprocess分離

Latchkeyのrunnerでは、jobのprocessは定義されたCPUとメモリを持つ分離された環境で実行されます。runnerを適切にサイジングすることで、重いbuild processがメモリ不足によるkillを避けるのに必要な余裕を得られます。

重要なポイント

  • processは、独自のメモリとリソースを持つ、実行中のプログラムのインスタンスです。
  • processは親子ツリーを形成し、親から環境を継承します。
  • CIでは各コマンドがprocessであり、processごとのCPUとメモリ制限を受けます。

関連ガイド