Solaris のシステム管理 (第 2 巻)

プロセスの制御 (/proc ツール)

/usr/proc/bin に入っているプロセスツールを使用すると、プロセスの一部を制御できます。表 35-3 に、これらのプロセスツールを示します。詳細は、proc(1) のマニュアルページを参照してください。

表 35-3 プロセスツール

ツールの種類 

ツールの機能または表示内容 

/usr/proc/bin/pstop pid

プロセスを停止する 

/usr/proc/bin/prun pid

プロセスを再開する 

/usr/proc/bin/ptime pid

microstate アカウントを使用してプロセスの時間を測定する

/usr/proc/bin/pwait [-v] pid

指定されたプロセスが終了するのを待つ 

 

プロセスの詳細を表示するツール 

/usr/proc/bin/pcred pid

資格 

/usr/proc/bin/pfiles pid

開いたファイルの fstat 情報と fcntl 情報

/usr/proc/bin/pflags pid

/proc の追跡フラグ、保留シグナルと保持シグナル、lwp ごとの他の状態情報

/usr/proc/bin/pldd pid

各プロセスにリンクされた動的ライブラリ 

/usr/proc/bin/pmap pid

アドレス空間マップ 

/usr/proc/bin/psig pid

シグナルの動作 

/usr/proc/bin/pstack pid

lwp ごとの 16 進数 + 記号スタックトレース

/usr/proc/bin/ptree pid

指定した pid が入ったプロセスツリー

/usr/proc/bin/pwdx pid

現在の作業ディレクトリ 

上記の表 35-3 で、pid はプロセス識別番号です。この番号は ps -ef コマンドを使用して表示できます。

第 35 章「プロセスの管理手順」では、プロセスツールコマンドを使用して、プロセスの詳細表示や、プロセスの起動および終了などのシステム管理作業を実行する方法を説明します。プロセスツールのさらに詳細な説明は、proc(1) のマニュアルページを参照してください。

プロセスが無限ループ内でトラップされた場合や、実行時間が長すぎる場合は、プロセスを終了 (kill) できます。pkill コマンドを使用してプロセスを終了する方法については、第 35 章「プロセスの管理手順」を参照してください。

以前のフラットな /proc ファイルシステムは、状態情報と制御機能のためのサブディレクトリが追加されたディレクトリ階層に再構築されました。

/proc ファイルシステムは、ウォッチポイント機能も提供します。この機能は、プロセスのアドレス領域の個々のページの読み取り権または書き込み権を再マップするために使用されます。この機能は制限がなく、MT-safe です。

新しい /proc ファイル構造は、古い /proc インタフェースと完全なバイナリ互換を提供します。ただし、新しいウォッチポイント機能は、古いインタフェースでは使用できません。

デバッグ用ツールは、/proc の新しいウォッチポイント機能を使用するように変更されています。つまり、ウォッチポイントプロセス全体がより高速になったためです。

dbx デバッグ用ツールを使用してウォッチポイントを設定するときの次の制限は取り除かれました。

詳細は、proc(4)core(4)、および adb(1) のマニュアルページを参照してください。


注 -

長いコマンド名を入力しなくてもすむように、プロセスツールディレクトリを PATH 変数に追加してください。これにより、各ファイル名の最後の部分 (たとえば、/usr/proc/bin/prun ではなく prun) を入力するだけで、プロセスツールを実行できます。


プロセスを制御する方法

  1. (省略可能) ps コマンドからの出力を使用して、詳細情報を表示したいプロセスの識別番号を調べます。


    # pgrep process
    

    process

    詳細情報を表示したいプロセス名 

    プロセス識別番号は、出力の第 1 列目に表示されます。

  2. 適切な /usr/proc/bin コマンドを使用してプロセスを制御します。


    # /usr/proc/bin/pcommand PID
    

    pcommand

    実行したいプロセスツールコマンド。これらのコマンドについては、表 35-3 を参照

    PID

    プロセスの識別番号 

  3. ps コマンドで、プロセスの状態を確認します。


    # ps | grep PID
    

例 - プロセスを制御する

次の例は、プロセスツールを使用して印刷ツールを停止したり、再起動したりする方法を示しています。


# PATH=$PATH:/usr/proc/bin
# export PATH
# ps -e | grep 'print*'
264 console 0:03 printtool
# pstop 264
# prun 264
# ps | grep 264
264 console 0:03 printtool
#
  1. /usr/proc/bin ディレクトリを PATH 変数に追加します。

  2. 印刷ツールのプロセス識別番号を表示します。

  3. 印刷ツールプロセスを停止します。

  4. 印刷ツールプロセスを再開します。