Linux(UNIX)システム上で動作するアプリケーション・プログラムの実行単位です。ユーザーが実行したアプリケーションは,プロセスという単位でカーネルにより管理されます。カーネルは,プロセス単位でスケジューリングを実施。タイマー割り込みなどでプロセスを切り替えることでマルチ・タスクを実現しています。

 アプリケーション・プログラムは通常ライブラリの関数を呼び出し,ライブラリ関数がシステム・コールでカーネルのコードを呼び出します。アプリケーションからカーネルに実行モードが切り替わるときは,プロセスの切り替えはなく,同じプロセスのままです。

 プロセスには,「実行中」,「実行待ち」,「イベント待ち」,「終了」の4つの状態があり,開始,中断,終了に応じて状態が切り替わります。これはカーネルがtask_struct構造体で管理します。

 シェル上でコマンド(アプリケーション)を実行すると,シェルがforkシステム・コールを発行し,カーネル内部でdo_fork関数が実行されます。do_forkが,シェルの子プロセスのtask_struct構造体を生成して,これによりプロセスが生まれます。そして,execシステム・コールにより,このプロセス用のメモリー領域が割り当てられ,そこに当該コマンドのコードが上書きされることで,このコマンドがプロセスとして実行開始されます。

 なお,現在どのようなプロセスが存在し,どのような状態になっているかは,「# ps aux」コマンドで確認できます。