macOSのデスクトップで作業しているとき、ソフトウェアの実行単位は「タスク」だが、実際のところそのタスクは複数の「プロセス」そして「スレッド」などから構成されている。Terminalではそのうち「プロセス」が主な作業対象で、プロセスをいかに把握しコントロールするかがシステム運営上の課題だ。シリーズ4回目となる今回は、プロセスを監視・管理するときに欠かせない「top」コマンドを紹介しよう。

topコマンドの基本(ただしMac流)

topコマンドは、CPUにかかる負荷やメモリ消費率などシステムの状況を把握するためのコマンド。稼働中のプロセスをほぼリアルタイムに監視する機能も備えており、アプリケーション/コマンドの動作状況を確認する目的にも利用できる。macOSには「アクティビティモニタ」というGUIのプロセス監視ツールが標準装備されているが、そのCUI版と理解してもいいだろう(アクティビティモニタのほうが多機能だが)。

起動はかんたん、引数/オプションなしに「top」と実行するだけ。オプションも用意されているが(後述)、使用しなくてもじゅうぶん活用できる。これが、topコマンドの一般的な動作モード(対話モード)だ。まずは「q」キーを押すとコマンドが終了されプロンプトに戻ること、「?」とタイプするとヘルプ画面が表示されることを覚えよう。

なお、対話モードは画面スクロールに対応していない。だから、画面に表示できる行数をオーバーした情報については、並び替えの基準を変えるか、後述するロギングモードを使うしかない。Terminalの表示モードをフルスクリーンに切り替えればそれなりの表示スペースができるが、やはり限界はあるため、Terminalにこだわる場合はMacPortsなどで入手できる「htop」コマンドの利用も検討してほしい。

$ top
  • オプション/引数を与えずに実行すると、対話モードとして起動される。終了するときには「q」キーを押すこと

多機能なアクティビティモニタが用意されているのにtopコマンドを使う必要はあるのか、という声も聞こえてきそうだが、必要な情報のみ取り出せるという点ではアクティビティモニタにない使いかたができる。たとえば、「-l」オプションに続けて数値を与えると出力回数を指定できるため(ロギングモード、Linuxのtopコマンドでバッチモードと呼ばれる機能とほぼ同じ)、grepコマンドで必要な情報だけを取り出せるのだ。以下の実行例では、topコマンドを実行した時点における物理メモリの使用率を調べている。

$ top -l 1 | grep PhysMem
  • 必要な情報だけを抜き出す使いかたもできる

並べ替えもtopコマンドの得意とするところだ。たとえば、オプションを付けずに対話モードを実行すると、プロセスID(PID)を基準に実行中のプロセスが表示されるが、「o」キーをタイプして「cpu」と入力すると(行末でenterキーを押す)、CPU使用率を基準に並べ替えられる。

このとき、「+cpu」などとキーワードの先頭に「+」をくわえると昇順に、「-」をくわえると降順に並び替えできるので、あわせて覚えておこう。たとえば、コマンド名で昇順(A→Z)に並び替えたい場合は「+command」、降順(Z→A)に並べ替えたい場合は「-command」という要領だ。

primary key [-pid]: +cpu
  • CPU使用率(降順)で並び替えたところ。並び順を逆転したければ「-cpu」ということになる

oオプションで指定できるおもなキーワード
pid プロセスID(デフォルト)
command コマンド名
cpu CPU使用率
mem 内部メモリ容量
time プロセスが起動されてからの時間
uid ユーザID
user ユーザ名

topコマンドの応用技(ただしMac流)

どのプロセスがどのような役割を担っているか、ある程度理解があるユーザ向けの機能として「プロセスの強制終了」がある。指定したプロセスにシグナルを送信する機能、つまり「kill」コマンドに相当する処理をtopコマンド経由で実行できるのだ。

使いかたはかんたん、「S」(SHIFT+s)を押すと「Signal [TERM]:」というメッセージが現れるので、そこに「kill」と入力しEnterキーを押す。すると「pid:」と表示されるので、そこで強制終了したいPIDを入力しEnter、という流れだ。

ただし、root権限で実行されているプロセスは一般ユーザの権限ではkillできないため、ひと工夫が必要になる。答えはかんたん、管理者権限でtopコマンドを実行する(sudo top)というものだが……「sudo kill」したほうが合理的という気もしないではないが、こんなこともできるという意味では知っておいて損のない情報かもしれない。

  • 対話形式の画面からプロセスをkillすることもできる