ps・top・killの使い方 - Linuxプロセス管理入門

ps・top・killの使い方 - Linuxプロセス管理入門

この記事でできるようになること

  • ps aux と top で動いているプロセスを確認できる
  • kill と kill -9 を使い分けて安全に終了できる
  • PID の取り違えによる誤操作を防げる

前提知識(先に読むと理解しやすい記事)

Linuxを触っていると、次のような場面に必ず出会います。

  • コマンドが返ってこない。
  • CPU使用率が急に上がった。
  • どのプロセスが動いているのか分からない。

この記事では、プロセス管理の基本操作を「暗記」ではなく「判断できる」状態になることを目標にします。

用語の整理:プロセス(process)とは、いま動いているプログラム1つ分のことです。「タスク」「ジョブ」と呼ばれることもありますが、この記事では「プロセス」で統一します。

先に結論:プロセス管理の判断の型

プロセスで困ったら、次の順で確認

  1. いま何が動いているかを見ます。
  2. 負荷や状態を確認します。
  3. 必要な場合だけ、穏やかに止めます。

いきなり kill しないことが、事故を防ぐ一番のポイントです。

プロセスとは何か(最低限)

結論: プロセスは実行中のプログラムそのものだ。PID は実行のたびに変わるので、止める前に必ず確認する。

プロセスとは、実行中のプログラムそのものです。同じコマンドでも、実行されるたびに別のプロセスとして扱われます。

覚えておくべきポイント

  • 各プロセスには PID(プロセスID) という番号が割り当てられます。
  • PIDは実行のたびに変わります。

この「PIDが変わる」という性質を理解していないと、誤った操作につながります。

ps:まず全体を把握する

結論: ps aux で PID・CPU・コマンド名を確認する。ここがプロセス管理の出発点になる。

基本形

$ ps aux
USER   PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     1  0.0  0.1 169084  1208 ?        Ss   10:00   0:01 /sbin/init
user  2345 80.2  5.1 512000 42000 ?        R    10:15   2:34 python app.py

aux の意味a は自分以外のユーザーのプロセスも表示します。u は実行ユーザー名と CPU・メモリ使用率を並べた形式で表示します。x は端末に結びついていないプロセスも表示します。3つ合わせて「動いているものを全部、詳しく表示」になります。この書き方ではハイフンを付けません。

見るポイント

  • PID:操作の対象になる番号です。
  • %CPU / %MEM:負荷の目安です。
  • COMMAND:何が動いているかを表します。

ps は状態を表示するだけのコマンドです。プロセスを止めたり変更したりはしません。何度実行しても安全です。

top:いま重い原因をリアルタイムで見る

結論: top で load average と CPU 占有率をリアルタイムに見る。原因候補を絞ってから判断する。

実行

$ top

よく見る項目

  • 画面上部の load average を見ます。これは「待たされている処理の多さ」の目安です。
  • プロセス一覧の %CPU を見ます。

判断例

  • load average が高いときは、CPUが混雑しています。目安は CPU のコア数です。コア数は nproc で確認できます。この値を超えていたら混雑と判断します。
  • 特定プロセスの %CPU が高いときは、そのプロセスが原因の候補です。

top は q キーで終了できます。

よくある詰まり①:CPU100%=即 kill してしまう

結論: CPU100% でも即 kill -9 は禁物だ。後処理が飛んでデータが壊れることがあるので、まず様子を見る。

よくある誤解

$ kill -9 2345

この操作には、次の可能性があります。

  • 後処理が走りません。
  • データ破損や不整合を起こします。

CPUが高い理由が一時的な処理であることも多いため、まずは様子を見る判断が重要です。

kill:安全な止め方を理解する

結論: まずは穏やかな kill PID(SIGTERM)を送る。応答がないときだけ kill -9(SIGKILL)を使う。

基本(穏やかに止める)

$ kill 2345

これは SIGTERM を送ります。SIGTERM は「終了してください」という依頼の合図です。プロセスは保存などの後処理をしてから終了できます。

強制終了(最終手段)

$ kill -9 2345
  • どうしても止まらない場合だけ使います。
  • 常用はしません。

失敗するとどうなるかkill -9 は SIGKILL を送ります。これはアプリの「終了」ボタンと違い、後処理をする時間を与えません。書きかけのファイルが壊れることがあります。また、PIDを間違えると別のプロセスを止めてしまいます。

安全に試す方法:練習では、自分で起動したプロセスだけを対象にしてください。次の3ステップで安全に試せます。

$ sleep 300 &          # 1. 練習用プロセスを起動(& は「画面を占有せず裏で動かす」記号)
[1] 3456               #    表示された数字が PID
$ ps aux | grep sleep  # 2. COMMAND が sleep であることを確認
$ kill 3456            # 3. 自分で起動したプロセスだけを止める

sleep は指定した秒数だけ待つコマンドです。止めてもシステムには影響しません。本サイトの仮想ターミナル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。は学習用なので、あなたのパソコンは壊れません。

よくある詰まり②:別のプロセスを止めてしまう

結論: grep は自分自身も一覧に出す。PIDの見間違いを防ぐため、必ず COMMAND 名を確認してから止める。

注意が必要なパターン

$ ps aux | grep python
$ kill 1234
  • grep 自身が一覧に表示されます。
  • そのため PID を見間違えます。

対策

  • COMMAND を必ず確認します。
  • PIDだけで判断しません。

トラブルシューティング

結論: 症状ごとに「原因 → 確認 → 対処」の順で切り分ける。いきなり強制終了に飛ばない。

症状:コマンドが返ってこない

原因:実行中のプロセスがまだ処理を続けています。

確認:別のターミナルを開き、次のコマンドで状態を見ます。

$ ps aux | grep コマンド名

対処

  1. 実行中の画面で Ctrl + C を押して中断します。
  2. 効かない場合だけ、別のターミナルから kill PID を送ります。

症状:kill しても終了しない

原因:プロセスが SIGTERM を受け取れない状態にあります。ディスクなどの入出力を待っている場合が代表例です。

確認

$ ps -p 2345 -o pid,stat,comm

STAT 列が D なら、入出力の待ちで割り込みができない状態です。この状態では SIGKILL でも止まりません。

対処:STAT 列の値で分かれます。

  1. STAT が D 以外(SR など)の場合:数十秒待ってから再確認し、それでも残るときだけ kill -9 2345 を実行します。
  2. STAT が D の場合:kill -9 を送っても止まりません。入出力が終わるまで待ちます。数分たっても D のままなら、ディスクやネットワークストレージ側の障害を疑います。

プロセスが増え続けるときの考え方

結論: 増え続けるときは、いきなり止めない。自動起動・cron・親プロセスを先に確認する。

確認すべきポイント

  • 自動起動していませんか。
  • 定期実行(cronなど)ではありませんか。
  • 親プロセスは何ですか。

いきなり止めるのではなく、なぜ増えているかを考えることで再発を防げます。

実践例:安全に確認して止める手順

結論: ps → top → kill の順を守る。状況把握・判断・操作の流れが崩れないので、誤操作を防げる。

推奨手順

$ ps aux          # 1. 全体把握
$ top             # 2. 負荷確認
$ kill 2345       # 3. 穏やかに終了

注意2345 はこの記事の例です。そのまま打たないでください。手順1の ps aux で表示された、自分が止めたいプロセスの PID に置きかえてください。

この順番を守るだけで防げること

  • 誤操作を防げます。
  • 不要な強制終了を防げます。

なぜこの手順が安全なのか

  • 状況把握 → 判断 → 操作、の順になります。
  • PIDの取り違えを防げます。
  • 一時的な負荷を誤って止めにくくなります。

プロセス管理は「急がない」ことが安全につながります。

作業完了チェックリスト

結論: 把握・判断・操作・確認の4段階を順に埋める。埋まっていない段階があれば、そこへ戻る。

Step 1: 状況把握

  • ps aux で対象プロセスの PID と COMMAND を確認しました。
  • top で %CPU と load average を確認しました。

Step 2: 判断

  • 一時的な処理ではないことを確認しました。
  • 止めてよいプロセスであることを COMMAND 名で確認しました。

Step 3: 操作

  • まず kill PID(SIGTERM)を送りました。
  • 数十秒待っても終わらない場合だけ kill -9 PID を使いました。

Step 4: 確認

  • 再度 ps aux で対象プロセスが消えたことを確認しました。
  • ほかのプロセスを止めていないことを確認しました。

まとめ

結論: 場面ごとに使うコマンドは4つだけだ。この対応表を覚えれば判断に迷わない。

場面 コマンド 目的
全体把握 ps aux PID と COMMAND を確認する
負荷確認 top load average と %CPU をその場で見る
穏やかに終了 kill PID SIGTERM を送り、後処理をさせて終わらせる
最終手段 kill -9 PID SIGKILL で強制的に終わらせる

次に読む

この記事を共有

次の一手