🐧 Linux 総合学習プラットフォーム
基本操作・コマンド ・ 入門

プロセスを確認する

いま動いているプログラムは「プロセス」として管理され、それぞれにPID(プロセス番号)が付きます。ps で一覧を取得し、top でCPUやメモリの使用状況をリアルタイムに眺め、応答しなくなったプロセスは kill にPIDを渡して終了させます。

コンピュータの上では、いつも複数のプログラムが同時に動いています。実行中のプログラムひとつひとつを、Linuxはプロセスという単位で管理します。プログラムが起動するとメモリ上に専用の領域が確保され、そこに実行コードと作業用のデータが置かれます。この「動いている実体」がプロセスです。ディスクに置かれたプログラムファイルが「レシピ」だとすれば、それを実際に調理している最中の状態がプロセスにあたります。同じプログラムを2つ起動すれば、それぞれに別の領域が割り当てられ、別個のプロセスとして扱われます。応答しなくなったアプリを止めたり、負荷の原因を突き止めたりするには、まずこのプロセスを見たり操作したりできることが出発点になります。

プロセスを識別する PID

各プロセスには、起動時に重複しない番号が割り振られます。これが PID(Process ID、プロセス番号)です。プロセスを操作するコマンドは、ほぼ例外なくこの PID で対象を指定します。PID はプロセスを起動するたびに新しく振られ、同じプログラムでも実行のたびに値が変わるため、「いま動いているこのプロセスの番号はいくつか」をその都度調べてから操作する、という流れになります。なお、システム起動時に最初に立ち上がるプロセスには PID 1 が与えられ(systemd などの初期化プロセス)、他のすべてのプロセスはそこから派生していきます。プロセスにはそれを起動したユーザ(所有者)の情報も結び付いており、原則として自分が起動したプロセスだけを自分で操作できます。他人のプロセスを勝手に止められないこの仕組みも、マルチユーザ環境を安全に保つための設計です。

一覧を取る ps

動いているプロセスを一覧表示するのが ps コマンドです。引数なしの ps では、自分がいまのターミナルから起動したプロセスだけが、PID・端末・実行時間・コマンド名とともに簡潔に表示されます。システム全体を見たいときは ps aux という組み合わせが定番で、a(端末から起動した全プロセス)・u(所有者やCPU・メモリ使用率などの詳細)・x(端末を持たないプロセスも含める)を合わせることで、稼働中のすべてのプロセスを詳しい情報付きで一覧できます。出力が膨大になるので、実務では ps aux | grep 名前 のようにパイプと grep で目当てのプロセスだけ絞り込むのが常套手段です。

出力の各列の意味を押さえておくと読み解きが速くなります。USER は所有者、PID はプロセス番号、%CPU と %MEM はCPUとメモリの使用率(高いほど負荷が大きい)、TTY は起動元の端末、STAT は状態、COMMAND は実行中のコマンド名です。STAT の先頭1文字がとくに重要で、R は実行中(または実行可能)、S はスリープ(イベント待ちで休止中)、T は停止中、Z はゾンビ(すでに終了したのに後始末が済んでいない状態)を表します。たとえば %CPU が極端に高く STAT が R のまま張り付いているプロセスは、暴走を疑う手がかりになります。ゾンビが大量に残っている場合は、親プロセス側の不具合を疑います。

リアルタイムに眺める top

ps が「その瞬間のスナップショット」なのに対し、top は画面を一定間隔で更新し続け、CPUやメモリの使用状況をリアルタイムに観察できます。負荷の高いプロセスが上位に並ぶよう自動で並び替わるため、「いま何が重いのか」を即座に把握するのに向いています。画面上部にはシステム全体のCPU使用率やメモリの空き、ロードアベレージ(混み具合の指標)も表示されます。システムが急に重くなったときは、まず top を開いて、どのプロセスがCPUやメモリを食い潰しているかを確認する——という使い方が基本です。表示中に大文字の M を押すとメモリ使用量順、P を押すとCPU使用量順に並べ替えられ、原因の切り分けに役立ちます。top の表示は q キーで終了します。より見やすく操作しやすい htop という改良版が入っていることもあります。

終了させる kill とシグナル

応答しなくなったプロセスや、資源を消費し続ける有害なプロセスは、kill コマンドで終了させます。書式は kill PID で、ps や top で調べた PID を渡します。kill という名前から「強制的に殺す」印象を受けますが、実態はプロセスに「シグナル」という合図を送るコマンドです。何も指定しないと既定で15番(SIGTERM)が送られ、これは「後片付けをしてから終了してください」という穏やかなお願いです。プログラムは開いているファイルを閉じたり、データを保存したりといった終了処理を済ませてから自分で終了できるため、まずはこの既定の kill を試すのが作法です。

通常の kill で終わらないときは、シグナル番号を明示して試します。kill -2 PID は Ctrl + c と同じ割り込み、最終手段が kill -9 PID(SIGKILL)です。-9 はカーネルがプロセスを問答無用で打ち切ります。確実に止まる反面、後片付けの機会を与えないため、書きかけのデータが壊れる恐れがあります。だからこそ、いきなり -9 を使うのではなく「まず15、それでも駄目なら9」という順番が大切です。なお、他のユーザのプロセスを止めるには sudo kill PID のように管理者権限が必要です。関連して、システムのメモリが枯渇すると、カーネルが自動でプロセスを強制終了して全体を守ることもあります(OOM killer)。アプリが理由もなく落ちていたら、こうした仕組みやログを疑う視点も持っておくとよいでしょう。プロセスを正しく見て、状態を読み、適切なシグナルで止める——この一連の流れが、トラブル対応の土台になります。

この項目に出てくる用語

プロセスぷろせす
実行中のプログラム1つ1つの単位。
PIDぴーあいでぃー
プロセスID。動作中の各プロセスに割り振られる番号。

関連コマンド

pstopkill

▶ 学習アプリでこの続きを学ぶ・演習する