Linuxのプロセス管理
Linux では、実行中のプログラム(プロセス)を管理することが重要です。
特に、ps
コマンドを使えば、システム内のプロセスを簡単に確認できます。
本記事では、Linux のプロセスとは何か、ps
コマンドを中心に、プロセスの管理方法を解説します
プロセスとは?
プロセス(Process) とは、実行中のプログラムのこと です。
Linux では、プロセスごとに PID(プロセスID) が割り振られ、システムが管理します。
プロセスの種類
種類 | 説明 |
---|---|
フォアグラウンドプロセス | ユーザーが直接操作できるプロセス(例:vim 、nano など) |
バックグラウンドプロセス | ユーザーの操作なしで動作するプロセス(例:cron 、sshd など) |
デーモンプロセス | システムサービスとして動作するプロセス(例:apache2 、mysql など) |
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
ありがとうございます、参考になった
ご参考になったようで良かったです!