プロセスの管理の実践的な応用に入る前に、Linux プロセスとは何か、そしてどのように機能するかを理解することが不可欠です。このトピックは詳細を探るにつれて複雑に思えるかもしれませんが、必要に応じて後でこのレッスンに戻ってきても構いません。
Linux プロセスとは何か
プロセスとは実行中のプログラムのことです。より正確には、システムがメモリ、CPU 時間、I/O などのリソースを割り当てた、実行中のプログラムのインスタンスです。例えば、3 つのターミナルウィンドウを開き、そのうち 2 つで引数なしにcatコマンドを実行し(標準入力を待ち、プロセスをアクティブに保ちます)、3 番目のウィンドウでps aux | grep catを実行すると、2 つの異なるcatプロセスが表示されます。それぞれが同じプログラムの別個のインスタンスであり、独自のプロセス ID とリソース割り当てを持っています。
プロセス管理におけるカーネルの役割
Linux カーネルがあらゆるプロセス管理を担当します。プログラムを実行すると、カーネルはそのコードをメモリにロードし、必要なシステムリソースを割り当て、プロセスとして追跡を開始します。カーネルは、各プロセスについて以下の情報を含む詳細な情報を維持します。
- プロセスの状態
- プロセスが使用中および受信中のリソース
- プロセスの所有者
- シグナル処理(これについては後述します)
- その他基本的にすべて
すべてのアクティブなプロセスはシステムリソースをめぐって競合します。カーネルはスケジューラとして機能し、各プロセスがその優先度とニーズに基づいてリソースの公正なシェアを受け取るようにします。プロセスがタスクを完了するか終了すると、カーネルはそのプロセスが使用していたリソースを回収し、他のプロセスが利用できるようにします。