前々回は自身のプロセスの状態を把握するpsコマンドについてでしたが、そのpsコマンドを静止画とすると、その動画版であるtopについての話。
さらにtopのカラー版がhtopです。
topコマンドの実行
ターミナルで ” top ” と入力します。
top
psの状態のモニターが始まります。
表示結果の解釈
モニターは上段5行のヘッダー部と、その下のプロセス表示部に分かれています。

ヘッダ部
主に統計情報が表示されます。

1行目
top – 「現在の時刻」
up 「システムの稼働時間」,
「ログインユーザ数」 users,
load average: 「過去1分」, 「過去5分」, 「過去15分」 (下記参照)
load averageについて
平均タスク待ち数(単位時間当たりの平均的なシステムへの負荷タスク数)のことです。
計算方法は、CPU1コア当たりの(実行中のタスク+実行待ちのタスク)の平均値を計算します。
例えば4コアのラズパイの場合、この値が4.0となれば100%CPUを使用していることになります。
参考
仕事単位の大きさ: ジョブ > プロセス > スレッド
タスク数=プロセス数+スレッド数
ジョブ:シェルから割り当てられるコマンドの仕事単位、1つ又は複数のプロセスから構成される
プロセス:基本的な仕事実行単位、メモリやCPU時間などを独立して割り当てられている
スレッド:プロセスより小さい仕事単位、プロセスは1つ又は複数のスレッドから構成される
タスク:プロセスとスレッドをまとめた概念
2行目 タスクの情報
現在取り扱っているタスク数が表示されています
tasks: 「総数」total, 「実行中の数」 running, 「待機中の数」sleeping, 「停止中の数」zombie
3行目 CPU使用率
CPU使用割合が%表示されています。
us | ユーザープロセスのCPU使用割合 |
sy | システムプロセスのCPU使用割合 |
ni | 優先度を変更されたプロセスのCPU使用割合(nice値) |
id | アイドル状態(何もしていない)の割合 |
wa | I/O待機に消費されている割合 |
hi | ハードウェア割り込み処理に消費されている割合 |
si | ソフトウェア割り込み処理に消費されている割合 |
st | 他の仮想マシンに盗まれた割合 |
nice値:優先度を示す値:小さいほど優先:優先度が上がればマイナス表示、優先度が低いとプラス表示
4行目 メモリ使用状況(物理メモリ)
total | 合計メモリ容量 |
free | 未使用メモリ容量 |
used | 使用中メモリ容量 |
buff | バッファやキャッシュに使用中メモリ容量 |
5行目 メモリ使用状況(スワップ)
total | 合計スワップ容量 |
free | 未使用スワップ容量 |
used | 使用中スワップ容量 |
avail mem | 使用可能メモリ容量(物理+スワップ) |
プロセス表示部
” ps aux ” コマンド実行時と同じような、現在実行中のプロセスが一覧表で表示されます。

列の意味
デフォルトで表示されるプロセス表示欄の各列の意味です。
PID | プロセスID |
USER | ユーザ名 |
PR | 優先度:低い方が優先 |
NI | nice値(相対優先度):低い方が優先 niceコマンドによるユーザの優先度補正が可能 -20から19までの数値 |
VIRT | 仮想メモリ(物理メモリ+スワップ) |
RES | 物理メモリ |
SHR | 共有メモリ(他プロセスとの共有可能性含む) |
S | 状態コード(下記) ( ” ps aux ” の ” STAT ” 列に相当) |
%CPU | CPU使用率 |
%MEM | メモリ使用率 |
TIME+ | 累積のCPU使用時間 |
COMMAND | コマンド名またはプロセス名 |
S(状態コード)欄の意味
そのプロセスの状態を表示します。 ” ps aux ” の ” STAT ” 列の表示に相当します。
状態コード | 説明 | |
R | 実行中(Running) | 又は実行可能状態、CPUで動作中。 |
S | 待機中(Sleeping) | 割込可能 |
D | 割込不可の待機中 | ディスク操作中など |
Z | ゾンビプロセス | 終了したが親プロセスが回収していない |
T | 停止中 |
オプション
デフォルトでは3秒毎に表示の更新が行われています。
静止画オプション
psと同じようにある瞬間の情報を得たい場合は、
top -b -n 1

”-b ” がバッチ(書き出し)オプション、 ” -n 1 ” で1回目の更新時に終了(してそれを書き出し)というオプションです。
” -d ” オプション
データ更新までの時間(デフォルトでは3秒)を変更設定する。
例えば5秒毎に更新したいならば、
top -d 5
” -v ” オプション
バージョンは4.0.4

topのヘルプ
以下の通り

対話モードでのキー操作
コマンドラインのオプション以外にも、topコマンド実行後のキー操作(対話モードでのキー操作)で様々な操作ができます。以下、代表的なキー操作です。
” q ” キー
topの終了キーです。
” h ” キー
キー操作のヘルプが表示されます。

ヘルプ画面からの離脱は、 ” q ” 又は ” Esc ” キー。
プロセス操作キー
” k ” キー
プロセスを終了させます。
- kキーの後、
- 終了させたいPID(プロセスID)を入力してEnter
- シグナル番号(デフォルトは15)を指定してEnter(何も指定せずEnterを押せばデフォルトで15が指定)
kキー後に指定するシグナル番号の詳細
シグナル名 | 番号 | 意味 |
SIGTERM | 15 | デフォルトの終了(普通終了) |
SIGKILL | 9 | 強制終了(普通終了が出来ない時) |
SIGHUP | 1 | 設定の再読込(デーモンに使用) |
SIGSTOP | 19 | 一時停止 ” kill –STOP <PID> ” コマンドと同じ |
SIGCONT | 18 | 一時停止したプロセスの再開 |
当然ですが重要なシステムプロセスを誤って停止させてしまうとシステムが不安定になるので注意が必要です。
” kill ” コマンドの、 ” kill –シグナル番号 <PID> ” と同じ効果です。
” r ” キー
プロセスの相対優先度(nice値)を変更する。値は-20(最優先)から、19(最劣後)まで。
rキーの後、優先度を変更したいPIDを入力し、nice値を入力する。
表示更新
space キー
手動で更新する。
” d “, 又は ” s ” キー
更新間隔(デフォルトは3秒)を変更。
” d “, 又は ” s ” を入力した後、秒数を入力。

上から6行目に入力表示が出ます。(上記は「10秒毎」に設定を変更しようとしています。
並び替え
いずれも大文字なので、 ” shift + 小文字 ” で入力します。
キー | 機能 | ソート列 |
P | CPU使用率でソート(デフォルト) | %CPU |
M | メモリ使用率でソート | %MEM |
T | 累積CPU時間でソート | TIME+ |
N | プロセスIDでソート | PID |
R | 逆順にソート |
検索・フィルタリング
ここでは ” u ” と ” o ” キーを取り上げます。
” u ” キーによるフィルタリング
” u ” キーにより、特定ユーザのみを表示できます。
” u ” キーにより、6行目が以下の入力待ちの状態となります。

例としてユーザ ” kali ” のみを表示します。

実行結果

” o ” キーによるフィルタリング
” o ” キーにより、6行目が以下の入力待ちの状態となります。

例として ” COMMAND=systemd ” の条件を設定しています。

フィルタリングの実行結果

表示のカスタマイズ
” f ” , ” X ” , ” z ” , ” b ” キーによる表示のカスタマイズができますが、ここでは列のカスタマイズを取り上げます。
” f ” キーによる列のカスタマイズ
” f ” キーを押すと列のリストが表示されます。

%CPUの項目がハイライトされていますが、上下キーでそのハイライトを動かせます。
(例:PPIDにハイライトが移動しています。)

Spaceキーを押すと、選択/非選択を切り替えられます。

左に*印が付き、選択されました。
” q ” キーで元の画面に戻ると、 ” PPID ” 列が追加されています。

表示形式のカスタマイズ(ヘッダー部)
” 1 ” キー
ヘッダー部の各CPUコアの使用状況の表示/非表示の切替をします。

ラズパイのCPUは4コアなので、CPU0からCPU3までの4つのコア毎のCPU使用率が表示されます。
” t ” キー
ヘッダー部のタスクとCPUの統計情報の切替を行います(3画面あります。デフォルトを入れると4画面)
まずはデフォルト画面

” t ” キーを1回押し後

CPU使用率がグラフ表示になります。
” t ” キーを2回押し後

CPU使用率が横棒グラフ表示になります。
” t ” キーを3回押し後

タスクとCPUの欄が非表示となります。
さらに ” t ” キーを押すとデフォルト画面に戻ります。
” m ” キー
ヘッダー部のメモリとスワップの情報の表示/非表示の切替を行います。
まずはデフォルト画面

” m ” キーを1回押し後

メモリ/スワップの表示がグラフ表示となります。
” m ” キーを2回押し後

メモリ/スワップの表示が横棒グラフ表示となります。
” m ” キーを3回押し後

メモリ/スワップの表示が非表示となります。
さらに ” m ” キーを押すとデフォルト画面に戻ります。
表示形式のカスタマイズ(プロセス表示部)
” c ” キー
プロセス表示部のコマンド列の表示形式を変更します。
デフォルト画面のコマンド列。単純なコマンド名が表示されています。

” c ” キーを押した後、

詳細なフルコマンドラインが表示されます。
もう一度 ” c ” キーを押すとデフォルト画面に戻ります。
カスタマイズ内容の保存
” w ” キーにて保存できます。
現在の設定を保存し、次回に引継きます。
マウウェア発見の手掛かりとして
psコマンドの項でも述べましたが、topコマンドによるプロセスの監視により、不審なプロセスを発見する手掛かりになります。
- 不審なプロセス名
- メモリ・CPUリソースの消費量が大きい
- 親プロセス名が不審
- 不審なコマンド
- 実行ファイルの存在場所が不審
- TTY列が ” ? ”
注意点・限界
プロセスの監視だけでマルウェアを発見しようとする場合には、限界があります。
- プロセス名・コマンドラインは偽装可能(正常そうな名前でも疑いを否定できない)
- プロセス自体を隠蔽可能(ルートキット使用による)
- 既存プロセスに悪意のコードを注入可能(正常な名前でも疑いを否定できない)
- 正常プロセスをマルウェアと誤認してしまう可能性に注意
追加の精査手段
挙動不審なプロセスを発見した場合の追加検査手段。
- lsof: ” lsof -p <PID> ” コマンドで実行ファイルの場所をチェック
- ss, netstatコマンドによりソケットのチェック(外部との不正な通信の監視)
- ルートキットのチェック:chkrootkit, rkhunterなどによる
- アンチウイルスソフトの使用:clamAV(kaliのデフォルトには入っていません)
まとめ
今回、topとhtopを併せて取り上げようと思ったのですが、topだけでかなりの分量となりましたので分割することにしました。
普段と何か違うような気がする場合、自分のマシンの挙動に不審を抱いた時にはとりあえずtopを覗いてみるのもアリかなと思います。
Mac上でもターミナルを起動すればtopが動きます。
(但しオプション類が、kali版とはかなり異なります)

また異常な状態を検知するには、普段からの状態を時々把握しておく必要があります。
コメント