Linux / コマンド / ps - 現在のプロセス状態を確認

psは実行時のプロセス一覧を表示します。プロセスを識別する番号(PID)やユーザー、状態、コマンドを確認して特定のサービスや作業が実際に実行中か調査する際に使用します。

psはある時点のスナップショットを出力して終了します。継続的な変化を調べる場合は、topによる定期更新表示 やhtopを使います。オプション表記にはPOSIX形式とBSD形式が混在しており、ハイフンの有無によって意味が変わることがあります。

基本的な文法

ps [オプション]

インストールされている実装とオプションは、配布版によって異なる場合があります。man psで現在のシステムの説明を確認してください。

使用例

現在のターミナルのプロセス

procps-ng版では通常、実効ユーザーIDが自分と同じで、呼び出した端末にも結び付いたプロセスを選びます。単に全ユーザーの同じ端末のプロセスを表示する指定ではありません。

ps

システム全体のプロセス

ユーザー、PID、親PID、コマンドを広く確認します。

ps -ef

特定のPIDのフィールド指定

1234 を実際に確認したいPIDへ置き換えます。-o で必要な列を指定すると、親プロセスID(PPID)、実効ユーザー名、状態、コマンド引数を比較しやすくなります。

ps -p 1234 -o pid,ppid,user,stat,cmd

プロセス列を読む方法

以下は対話型のBashで試す例です。列を指定すれば、PID(プロセスID)、PPID(親PID)、状態、コマンド名を明確に区別できます。

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

例の出力(番号は実行するたびに変わります):

    PID    PPID STAT COMMAND
   4321    4100 Ss   bash

対話型Bashの $$ はそのシェルのPIDです。ただしBashのサブシェル内でも $$ は元の値を保つため、常に現在の子プロセスIDを示すとは限りません。例のSTATにある S は割り込み可能な待機状態、s はセッションリーダーを示します。番号や状態は環境で変わり、表示直後に終了する場合もあります。シグナルを送る前には対象を再確認してください。

主なオプションと形式

オプション・形式 説明
-e 全プロセスを選択します。
-f 詳細形式で出力します。
-p PID 指定したプロセスIDのみを選択します。
-o 列リスト 出力するフィールドと順序を指定します。
aux BSDスタイルで全ユーザープロセスとリソース情報を見ます。

使用する際の注意点

ps | grep 名前は検索用で、grep自体が結果に混ざることがあります。名前を条件にPIDを探す場合は pgrepのプロセス検索 も使えます。プロセスは短時間で生成・終了し、PIDが再利用される場合もあるため、シグナルを送る前に対象を再確認します。procps-ngの %CPU は通常、プロセスの生存期間全体で使ったCPU時間の割合で、直近の更新間隔の使用率とは異なります。コンテナや権限制限で見える範囲も変わります。コマンド引数には機密情報が含まれる場合があるので、出力を共有する際は確認してください。

よくある質問

psとtopは何が違うのですか?

psは実行時点のリストを出力して終了します。topは画面を定期的に更新して変化を観察します。

公式ドキュメント

オプションの正確な動作と実装ごとの違いは、ps 関連の公式ドキュメントで確認できます。