Skip to content
Latchkey

プロセスとは?分離された環境で動くプログラム

プロセスは実行中のプログラムのインスタンスです。独自の分離されたメモリ、file handle、そして少なくとも 1 つの実行 thread を持ち、オペレーティングシステムによって管理されます。

プログラムを起動すると、オペレーティングシステムはそのためのプロセスを作成します。プログラムが動く、メモリとリソースのサンドボックス化されたコンテナです。各プロセスは他から分離されているため、crash したり誤動作したりするプロセスが別のプロセスを直接壊すことはできません。プロセス内では 1 つ以上の thread が実際の作業を行います。

プロセスが含むもの

プロセスは address space(メモリのプライベートな見え方)、開いている file descriptor、環境変数、そして少なくとも 1 つの thread を所有します。OS はこれらすべてを追跡し、明示的なチャネルなしにプロセスが互いのメモリを読めないよう分離を強制します。

プロセスと thread

プロセスは分離された重量級で、独自のメモリを持ちます。thread はプロセス内で動き、そのメモリを兄弟と共有します。プロセスは分離によって安全性を、thread は共有によって速度を与えます。多くのシステムは両方を組み合わせます。

プロセスがどう通信するか

  • プロセス間でデータをストリーミングする pipe と socket。
  • 高速で明示的な共有のための shared memory セグメント。
  • message queue とファイルシステム。
  • 粗い調整のための exit code と signal。

なぜ分離が重要なのか

プロセスはデフォルトでメモリを共有しないため、1 つの crash が別のを壊すことはなく、memory leak は 1 つのプロセスに限定されます。だからこそ、危険な、あるいは信頼できない作業を別プロセスで動かすのは一般的な安全パターンです。

簡単な例

cat log | grep error | wc -l のようなシェルパイプラインの各ステップは別々のプロセスとして動き、OS がその入力と出力を pipe でつなぎます。

CI におけるプロセス

CI job はそれ自体がプロセスツリーです。runner が build とテストのプロセスを spawn し、その exit code を監視します。非ゼロの exit はそのステップを fail させます。Latchkey は各 job を分離された環境で動かすため、ある job が次を汚染できず、本物の非ゼロ exit と retry する価値のある一時的なインフラの失敗を区別します。

重要なポイント

  • プロセスは、独自の分離されたメモリとリソースを持つ、実行中のプログラムです。
  • プロセスは分離され安全です。その中の thread はメモリを共有し高速です。
  • CI job は、その exit code が pass か fail かを決めるプロセスツリーです。

関連ガイド