ps・top・killの使い方 - Linuxプロセス管理入門
この記事でできるようになること
- ps aux と top で動いているプロセスを確認できる
- kill と kill -9 を使い分けて安全に終了できる
- PID の取り違えによる誤操作を防げる
前提知識(先に読むと理解しやすい記事)
Linuxを触っていると、次のような場面に必ず出会います。
- コマンドが返ってこない。
- CPU使用率が急に上がった。
- どのプロセスが動いているのか分からない。
この記事では、プロセス管理の基本操作を「暗記」ではなく「判断できる」状態になることを目標にします。
用語の整理:プロセス(process)とは、いま動いているプログラム1つ分のことです。「タスク」「ジョブ」と呼ばれることもありますが、この記事では「プロセス」で統一します。
先に結論:プロセス管理の判断の型
プロセスで困ったら、次の順で確認
- いま何が動いているかを見ます。
- 負荷や状態を確認します。
- 必要な場合だけ、穏やかに止めます。
いきなり 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 コマンド名
対処:
- 実行中の画面で
Ctrl + Cを押して中断します。 - 効かない場合だけ、別のターミナルから
kill PIDを送ります。
症状:kill しても終了しない
原因:プロセスが SIGTERM を受け取れない状態にあります。ディスクなどの入出力を待っている場合が代表例です。
確認:
$ ps -p 2345 -o pid,stat,comm
STAT 列が D なら、入出力の待ちで割り込みができない状態です。この状態では SIGKILL でも止まりません。
対処:STAT 列の値で分かれます。
- STAT が
D以外(SやRなど)の場合:数十秒待ってから再確認し、それでも残るときだけkill -9 2345を実行します。 - 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 で強制的に終わらせる |