このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:プロセスとは

プロセス
現代の多くのオペレーティングシステム(OS)は、マルチタスク機能を持っています。これにより、複数のプログラムを同時に並行して実行することが可能です。Linuxもその一つで、例えばファイルのコピーを待っている間にテキストファイルを開いて読むなど、ユーザーは一つのプログラムの終了を待たずに効率的に作業を進めることができます。ここでは、Linuxにおけるプロセスの仕組みについて詳しく解説します。

プロセスとは
これまで多くのコマンドを紹介してきましたが、これらのコマンドの実体はディスク上に保存された実行ファイルです。シェルからコマンドを実行すると、Linuxカーネルはディスクからその実行ファイルを読み出してメモリに格納し、そのメモリ内容に従ってCPUがプログラムを実行します。このメモリ上で実行状態にあるプログラムのことを、プロセスと呼びます。
プロセスの概要
- プロセス:実行中のプログラム。メモリ上で動作している。
- 実行ファイル:ディスク上に保存されたプログラムのファイル。
図:ディスク上の実行ファイルがメモリに読み込まれ、プロセスとして実行される様子

1.ディスク
ディスクには、/bin/cat
、/bin/ls
、/bin/date
といった実行ファイルが保存されています。これらのファイルはコマンドを実行する際に、メモリに読み込まれて実行されます。ディスク上のファイルは物理的な場所に保存されており、直接実行はできませんが、メモリに読み込まれることで実行可能になります。
2.実行ファイル
/bin/cat
、/bin/ls
、/bin/date
はそれぞれ異なるコマンドの実行ファイルです。ユーザーがこれらのコマンドを実行すると、これらのファイルがメモリ上に読み込まれます。
3.メモリ
実行ファイルがディスクからメモリに読み込まれると、メモリ上にプロセスが生成されます。この図では、/bin/cat
、/bin/ls
、/bin/date
の3つの実行ファイルが、それぞれ異なるプロセスとしてメモリに読み込まれ、実行されています。
4.プロセス
メモリ上では、各実行ファイルがそれぞれ独立したプロセスとして実行されています。図では4つのプロセスが表示されており、それぞれが異なるファイルを実行しています。
プロセスの特徴
- 独立したメモリ領域:プロセスは、それぞれ独自のメモリ領域を持ちます。同じコマンドから実行された場合でも、各プロセスのデータが混在することはありません。
- 実効ユーザー:プロセスには実効ユーザーが設定されており、ファイルの所有者と同様にアクセス権限が管理されています。他人のプロセスを勝手に操作することはできません。
- プロセスID(PID):Linuxカーネルは各プロセスに一意の番号であるプロセスIDを割り振り、適切に管理しています。
プロセスの親子関係
Linuxでは、新しいプロセスが作成されるとき、無から生成されるのではなく、既存のプロセスを元に作成されます。これを親子関係と呼び、以下のように分類します。
- 親プロセス:新しいプロセスを作成する元のプロセス。
- 子プロセス:親プロセスから作成された新しいプロセス。
例:シェルからls
コマンドを実行
- シェル(bashなど)が親プロセスとして動作。
- シェルが
ls
コマンドを実行すると、子プロセスとしてls
のプロセスが作成される。
プロセスを確認するコマンドと操作
Linuxでは、現在実行中のプロセスを確認・操作するためのコマンドがいくつか用意されています。以下に代表的なコマンドを紹介します。
ps
コマンド
ps
コマンドは、現在のプロセスの状態を表示します。
使用例
user01@ubuntu:~$ ps
PID TTY TIME CMD
3970 pts/0 00:00:00 bash
4040 pts/0 00:00:00 ps
項目 | 説明 |
---|---|
PID | プロセスID |
TTY | 端末の種類 |
TIME | プロセスが使用したCPU時間 |
CMD | 実行しているコマンド名 |
ps
コマンドtop
コマンド
top
コマンドは、リアルタイムでプロセスの情報を表示します。「q」キーを押すとtop
コマンドを終了してターミナルに戻ります。
使用例
user01@ubuntu:~$ top
実行結果
top - 23:09:56 up 6 min, 1 user, load average: 0.22, 0.34, 0.20
Tasks: 201 total, 1 running, 200 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.6 us, 2.4 sy, 0.0 ni, 92.6 id, 0.0 wa, 0.0 hi, 2.4 si, 0.0 st
MiB Mem : 3898.1 total, 2040.0 free, 1090.8 used, 1026.6 buff/cache
MiB Swap: 3898.0 total, 3898.0 free, 0.0 used. 2807.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3168 user01 20 0 3954772 390972 143848 S 22.3 9.8 0:11.22 gnome-s+
3963 user01 20 0 777160 68292 53320 S 1.0 1.7 0:00.96 gnome-t+
9 root 20 0 0 0 0 I 0.3 0.0 0:00.22 kworker+
...(省略)...
- CPUやメモリの使用状況が一覧表示されます。
- プロセスの優先度や実行時間など、詳細な情報を確認できます。
pstree
コマンド
pstree
コマンドは、プロセスの親子関係をツリー状に表示します。
使用例
システム上のプロセスがどのような親子関係になっているか、一目で分かります。
user01@ubuntu:~$ pstree
systemd─┬─ModemManager───3*[{ModemManager}]
├─NetworkManager───3*[{NetworkManager}]
├─VBoxDRMClient───5*[{VBoxDRMClient}]
├─VBoxService───8*[{VBoxService}]
├─accounts-daemon───3*[{accounts-daemon}]
├─avahi-daemon───avahi-daemon
├─colord───3*[{colord}]
├─cron
├─cups-browsed───3*[{cups-browsed}]
...(省略)...
kill
コマンド
kill
コマンドは、指定したプロセスにシグナルを送信して制御します。
使用例
バックグラウンドで、xeyes
を起動させます。

xeyes
は、2つの動眼を表示するグラフィカルなアプリケーションです。kill
コマンドで、プロセスIDが1234
のプロセス(xeyes
)を終了させます。
user01@ubuntu:~$ xeyes &
[1] 4169
user01@ubuntu:~$ ps
PID TTY TIME CMD
3970 pts/0 00:00:00 bash
4169 pts/0 00:00:00 xeyes
4215 pts/0 00:00:00 ps
user01@ubuntu:~$ kill 4169
まとめ
- プロセスは、メモリ上で実行中のプログラムのことを指します。
- Linuxカーネルは、各プロセスに一意のプロセスID(PID)を割り振り、適切に管理しています。
- プロセスは親子関係を持ち、既存のプロセスから新しいプロセスが作成されます。
ps
、top
、pstree
、kill
などのコマンドを使用して、現在実行中のプロセスを確認・操作できます。
プロセスの仕組みを理解することで、システムの状態を把握し、効率的にリソースを管理することができます。これらのコマンドを実際に使用してプロセスを操作し、Linuxのマルチタスク機能を最大限に活用してみましょう。