【Linux】プロセス管理系コマンドまとめ|ps・top・kill・niceなどの使い分け

Linux

どーも!marusukeです!

この記事では、Linuxでプロセスを確認・監視・終了・優先度変更するための主要コマンドをまとめて解説します。

この記事で分かることは次のとおりです。

  • 実行中プロセスを確認・監視するコマンド(ps・top・pstree・pgrep)
  • プロセスを終了させるコマンド(kill・pkill・killall)
  • プロセスの実行優先度を操作するコマンド(nice・renice)
  • それぞれのコマンドの使い分けと注意点

注意

kill -9killallなどの強制終了系コマンドは、保存していないデータの消失やシステム不安定化につながる可能性があります。まずは通常終了(SIGTERM)を試し、それでも終了しない場合の最終手段として使いましょう。

プロセス管理系コマンドの全体像

プロセス管理コマンドは、大きく3つの役割に分かれます。

役割コマンド用途
確認・監視ps実行中プロセスのスナップショットを表示
確認・監視topプロセスとリソース使用状況をリアルタイム監視
確認・監視pstreeプロセスの親子関係をツリー表示
確認・監視pgrepプロセス名からPIDを検索
終了killPIDを指定してシグナルを送信(終了など)
終了pkillプロセス名を指定してシグナルを送信
終了killallプロセス名でまとめて終了
優先度変更niceコマンド実行時の優先度(nice値)を指定
優先度変更renice実行中プロセスの優先度(nice値)を変更

基本的な流れは「ps/top/pgrep/pstreeでプロセスを確認 → 必要ならkill/pkill/killallで終了、またはnice/reniceで優先度を調整」という流れになります。

確認・監視系:ps・top・pstree・pgrep

ps

psコマンドは、実行中のプロセスをスナップショットとして表示します。

ps [オプション]

出力の主な列は次の通りです。

内容
PIDプロセスID
TTY実行している端末
TIMECPU使用時間
CMD実行されたコマンド

psの主なオプション

オプション説明
-e, -Aすべてのプロセスを表示
-fフルフォーマットで表示
-lロングフォーマットで表示
-u指定ユーザーのプロセスを表示
-p <PID>指定PIDのプロセスを表示
-t <TTY>指定端末のプロセスを表示
-sセッションID単位で表示
-C <コマンド>指定コマンド名で検索
-o <フォーマット>表示列をカスタマイズ(例:ps -o user,pid,%cpu

よく使われる組み合わせとしてps aux(全プロセスを詳細表示)があります。

詳しくはpsコマンドの記事を参照してください。

top

topコマンドは、プロセスとシステムリソースの使用状況をリアルタイムで監視できるコマンドです。psが一度きりのスナップショットなのに対し、topは画面が自動更新され続けます。

top

画面の主な構成は次の通りです。

内容
1行目(top)システム稼働時間、ログインユーザー数、ロードアベレージ(uptimeと同様)
2行目(Tasks)実行中/スリープ/停止/ゾンビプロセスの数
3行目(%CPU(s))us(ユーザー)/sy(システム)/ni(nice)/id(アイドル)/wa(I/O待ち)/hi/si/st
4行目(MiB Mem)メモリの total/free/used/buff-cache
5行目(MiB Swap)スワップの total/free/used/avail Mem

プロセス一覧の列:PID、USER、PR(優先度)、NI(nice値)、VIRT、RES、SHR、S(状態)、%CPU、%MEM、TIME+、COMMAND。

終了するにはqキーを押します。

詳しくはtopコマンドの記事を参照してください。

pstree

pstreeコマンドは、実行中のプロセスを親子関係のツリー構造で表示します。どのプロセスからどのプロセスが生成されたかを視覚的に確認できます。

pstree

例えば、systemd(親プロセス)からfirewalld(子プロセス)が生成されている、といった関係がひと目で分かります。

詳しくはpstreeコマンドの記事を参照してください。

pgrep

pgrepコマンドは、指定した名前のプロセスのPIDを検索するコマンドです。psより簡単にPIDだけを取得できるため、killと組み合わせて使われることが多くあります。

pgrep [オプション] プロセス名

使用例:

$ pgrep sshd
1256
2031

プロセス名も一緒に表示したい場合は-lを使います。

$ pgrep -l sshd
1256 sshd
2031 sshd

pgrepの主なオプション

オプション説明
-lPIDと一緒にプロセス名も表示
-aコマンドライン全体を表示
-u指定ユーザーのプロセスを検索
-x完全一致でプロセス名を検索
-fコマンドライン全体から検索
-n一番新しいプロセスだけ表示
-o一番古いプロセスだけ表示
-cプロセス数を表示

詳しくはpgrepコマンドの記事を参照してください。

終了系:kill・pkill・killall

kill

killコマンドは、PID(プロセスID)を指定してプロセスにシグナルを送信するコマンドです。「終了」だけでなく、再起動や停止などの通知も送れます。

kill [オプション] プロセスID(PID)

使用例:

$ ps aux | grep sleep
$ kill 12345

killの主なオプション(シグナル)

オプション説明
-15SIGTERM(通常終了、デフォルト)
-9SIGKILL(強制終了、最終手段)
-1SIGHUP(設定の再読み込み)
-2SIGINT(Ctrl+Cと同じ)
-l使用可能なシグナルの一覧を表示

まずはkill PID(SIGTERM)を試し、終了しない場合の最終手段としてkill -9を使うのがおすすめです。

詳しくはkillコマンドの記事を参照してください。

pkill

pkillコマンドは、PIDではなくプロセス名を指定して終了させるコマンドです。

pkill [オプション] [シグナル名] [プロセス名]

使用例:

$ pkill sleep

pkillの主なオプション

オプション説明
-fプロセス名の代わりにコマンドライン全体を一致対象にする
-iインタラクティブモード(確認あり)
-cマッチ数を表示(実際には終了しない)
-l使用可能なシグナルの一覧を表示
-n最新のプロセスを対象にする
-o最古のプロセスを対象にする
-u指定ユーザーのプロセスを対象にする
-s <シグナル>指定したシグナルを送信する

詳しくはpkillコマンドの記事を参照してください。

killall

killallコマンドは、指定した名前を持つプロセスをまとめて終了させるコマンドです。同じプログラムが複数起動している場合に、PIDを調べずに一括終了できます。

killall [オプション] プロセス名

使用例:

$ killall firefox

強制終了する場合:

$ killall -9 firefox

killallの主なオプション

オプション説明
-9強制終了(SIGKILL)
-15通常終了(SIGTERM、デフォルト)
-i終了前に確認を求める
-vシグナルを送ったプロセス名を表示
-u <ユーザー名>指定ユーザーのプロセスのみ対象
-eプロセス名の完全一致のみ対象
-r正規表現でプロセス名を指定

killallは名前が一致するプロセスをすべて対象にするため、システムの重要プロセスを指定すると不安定化の原因になります。-iオプション付きでの実行がおすすめです。

詳しくはkillallコマンドの記事を参照してください。

優先度変更系:nice・renice

nice

niceコマンドは、コマンドを新規実行する際にプロセスの優先度(nice値)を指定するコマンドです。

nice [オプション] コマンド [引数...]

nice値の範囲は-20(最も優先)~19(最も低優先)で、デフォルトは0です。

使用例:

$ nice -n 10 tar -czf backup.tar.gz /home/user

niceの主なオプション

オプション説明
-n <値>nice値を指定(省略時は10)
--helpヘルプを表示
--versionバージョン情報を表示

優先度を上げる(nice値を負の数にする)には管理者権限(sudo)が必要です。

詳しくはniceコマンドの記事を参照してください。

renice

reniceコマンドは、すでに実行中のプロセスの優先度(nice値)を変更するコマンドです。niceが起動時の指定なのに対し、reniceは後から変更する点が異なります。

renice [オプション] [新しいnice値] -p [PID]

使用例:

# 一般ユーザーが実行可能(優先度を下げる方向)
renice 10 -p 1234
1234 (process ID) old priority 0, new priority 10

# sudoで優先度を上げる
sudo renice -5 -p 1234
1234 (process ID) old priority 10, new priority -5

reniceの主なオプション

オプション説明
-n変更後のnice値を指定(省略可能)
-pプロセスIDを指定(デフォルト)
-gプロセスグループIDを指定
-uユーザー名またはUIDを指定し、該当ユーザーの全プロセスのnice値を変更

詳しくはreniceコマンドの記事を参照してください。

コマンド比較表

分類コマンド指定方法主な用途
確認・監視psプロセスのスナップショット表示
確認・監視topリアルタイム監視(CPU・メモリ含む)
確認・監視pstreeプロセスの親子関係をツリー表示
確認・監視pgrepプロセス名プロセス名からPIDを検索
終了killPIDPIDを指定して終了
終了pkillプロセス名プロセス名を指定して終了
終了killallプロセス名同名プロセスをまとめて終了
優先度変更nice起動時新規プロセスの優先度を指定
優先度変更renice実行中実行中プロセスの優先度を変更

典型的な使用フロー

  1. topまたはps auxで全体の状況を確認する
  2. 気になるプロセスがあればpgrepps -CでPIDを特定する
  3. pstreeで親子関係を確認し、影響範囲を把握する
  4. 終了させたい場合はkill PID(SIGTERM)を試す
  5. 終了しない場合はkill -9、複数ある場合はpkill/killallを使う
  6. 重い処理を実行する前に優先度を下げたい場合はnice -nで起動する
  7. すでに動いているプロセスの優先度を調整したい場合はreniceを使う

まとめ

プロセス管理コマンドは、「確認・監視(ps・top・pstree・pgrep)」「終了(kill・pkill・killall)」「優先度変更(nice・renice)」の3つに分けて理解すると整理しやすくなります。

終了系コマンド、特に-9(SIGKILL)やkillallは強力な反面リスクも伴うため、まずは通常終了を試し、最終手段として使うようにしましょう。

以上です!

ここまで読んでいただきありがとうございました!

コメント

タイトルとURLをコピーしました