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とメモリ制限を受けます。
関連ガイド
What Is a Process Environment? Inherited SettingsA process environment is the set of variables a program inherits from its parent. Learn how the environment i…
What Is a Background Job? Running Commands ConcurrentlyA background job is a command run with & so the shell continues without waiting. Learn how background jobs wo…
What Is a Signal? OS Notifications to ProcessesA signal is an OS message that interrupts a process to ask it to act, like stopping. Learn how signals such a…