🧑‍💻

Linuxのプロセス管理

2025/02/23に公開2

Linux では、実行中のプログラム(プロセス)を管理することが重要です。
特に、ps コマンドを使えば、システム内のプロセスを簡単に確認できます。

本記事では、Linux のプロセスとは何か、ps コマンドを中心に、プロセスの管理方法を解説します

プロセスとは?

プロセス(Process) とは、実行中のプログラムのこと です。
Linux では、プロセスごとに PID(プロセスID) が割り振られ、システムが管理します。

プロセスの種類

種類 説明
フォアグラウンドプロセス ユーザーが直接操作できるプロセス(例:vimnano など)
バックグラウンドプロセス ユーザーの操作なしで動作するプロセス(例:cronsshd など)
デーモンプロセス システムサービスとして動作するプロセス(例:apache2mysql など)

ps コマンドでプロセスを確認

ps コマンドを使うと、現在実行中のプロセス を一覧表示できます。

基本的な ps コマンド

$ ps
PID TTY          TIME CMD
1234 pts/0    00:00:01 bash
5678 pts/0    00:00:00 ps
  • PID → プロセスID
  • TTY → ターミナル番号(pts/0 は現在のセッション)
  • TIME → CPU使用時間
  • CMD → 実行中のコマンド

すべてのプロセスを表示

すべてのプログラムを表示させるにはps auxコマンドを使用します。

$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.1  0.5  22568  1348 ?        Ss   12:00   0:01 /sbin/init
user      1234  0.0  0.1  13240  1020 pts/0    Ss   12:05   0:00 bash
user      5678  0.0  0.1  10448   920 pts/0    R+   12:06   0:00 ps aux
  • USER → 実行ユーザー
  • PID → プロセスID
  • %CPU → CPU使用率
  • %MEM → メモリ使用率
  • VSZ → 仮想メモリサイズ
  • RSS → 実際のメモリ使用量
  • TTY → ターミナル番号
  • STAT → プロセスの状態(例:R=実行中、S=待機中)
  • TIME → CPU使用時間
  • CMD → 実行中のコマンド

特定のプロセスを検索

プロセス名で検索

$ ps aux | grep nginx
root     12345  0.0  0.5  22568  1348 ?        Ss   12:00   0:01 nginx: master process
www-data 12346  0.1  0.3  13240  1020 ?        S    12:00   0:00 nginx: worker process

特定の PID を表示

$ ps -p 12345
PID TTY      STAT   TIME COMMAND
12345 ?        Ss     0:01 nginx

top コマンドでリアルタイム監視

リアルタイムでプロセスの状態を監視するには top を使います。

$ top
Tasks: 200 total,   1 running, 199 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.0 us,  0.2 sy,  0.0 ni, 98.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  16000 total,   4000 free,   6000 used,   6000 buff/cache
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
1234 user     20   0  100000  10000   2000 S   0.5  0.1   0:05.00 bash
5678 root     20   0   50000   5000   1000 R   2.0  0.3   0:10.00 nginx
...
  • CPU使用率やメモリ使用率をリアルタイムで確認
  • q で終了、k でプロセスを終了可能

プロセスの終了(kill コマンド)

プロセスを強制終了

$ kill -9 12345

-9 は SIGKILL シグナル(強制終了)を送信

プロセス名で終了

$ pkill -9 nginx

特定のユーザーのプロセスを全て終了

$ killall -u user

ジョブ

シェル上でコマンドラインを実行すると、ジョブという単位で処理されます。
ジョブには、フォアグランドジョブとバックグラウンドジョブがあります。

  • フォアグランドジョブ:キーボードからの入力を受け取れる状態のジョブ
  • バックグラウンドジョブ:裏で動いているジョブ

フォアグラウンド & バックグラウンド管理

ジョブをバックグラウンドで実行

コマンド名の後ろに&をつけると、シャルからプロセスを切り離して、バックグラウンドで動作します。

$ wireshark &
[1] 3389

[1] はジョブ番号、3389 は PID

実行中のジョブをリスト表示

$ jobs
[1]+  Running                 wireshark &

-lオプションをつけるとプロセスIDも表示されます。

$ jobs -l
[1]+  3389 Running                 wireshark &

バックグラウンドジョブ を フォアグラウンドにする

fgコマンドを実行すると、フォアグラインドにすることができます。
ジョブ番号を指定せずに実行した場合は、カレントジョブが対象になります。
ジョブ番号を指定する際には%<ジョブ番号>を引数に渡します。

$ fg %1
wireshark


フォアグランド を バッググラウンドにする

bgコマンドを実行すると、バックグランドにすることができます。

$ bg %1
[1]+ wireshark &

ジョブの終了(kill コマンド)

killコマンドはプロセスIDを指定したプロセスにシグナルを送ります。
ジョブ番号を指定すれば、ジョブに含まれるすべてのプロセスにシグナルを送ります。

$ kill %<ジョブ番号>

$ jobs(ジョブ一覧)で終了されているか確認

まとめ

コマンド 説明
ps aux すべてのプロセスを表示
ps -p <PID> 指定したプロセスの情報を表示
top リアルタイムでプロセスを監視
kill -9 <PID> 指定したプロセスを強制終了
pkill -9 <プロセス名> プロセス名で終了
jobs 実行中のジョブを一覧表示
fg %<ジョブ番号> バックグラウンドジョブをフォアグラウンドにする
bg %<ジョブ番号> フォアグラウンドジョブをバックグラウンドにする

Discussion