TL;DR
実行中のプログラムのインスタンス。メモリ上に独立した領域を持ち、他のプロセスのメモリ空間にはアクセスできない。
仕組み
プロセスは大きく次の要素で構成されている。
- プログラムのコード(コードセグメントで管理する)
- プログラムで使う変数(データセグメント、ヒープ、スタックで管理する)
- レジスタと、そこで管理する実行状態(プログラムカウンタ、命令ポインタなど)
プロセスはメモリ内に独立した領域を持ち、他のプロセスのメモリ空間にはアクセスできない。 プロセス間で情報をやり取りするときは、プロセス間通信(IPC)を使う。
プログラムが終了するか、処理できないエラーが起きると、プロセスは終了する。プロセスが終了すると、OS はそのプロセスが使っていたメモリ領域、開いているファイルハンドル、ネットワーク接続などの資源をすべて回収する。回収した資源は、他のプロセスが使えるようになる。
1 つのプロセスは 1 つ以上のスレッドを持ち、メモリ空間をスレッドどうしで共有する。
注意点
Unix や Windows では、親プロセスが終了しても、子プロセスは自動では終了しない。