次の表では、プロセス情報を管理するために使用されるコマンドについて説明します。
表 23–1 プロセスを管理するためのコマンド| コマンド | マニュアルページ | 説明 | 
|---|---|---|
| ps、 pgrep、prstat | ps(1)、 pgrep(1)、 prstat(1M) | システム上のアクティブなプロセスの状態をチェックする。また、プロセスについての詳細な情報を表示する | 
| dispadmin | dispadmin(1M) | デフォルトのスケジューリングポリシーをリストする | 
| priocntl | priocntl(1) | プロセスに優先順位クラスを割り当てて、プロセスの優先度を管理する | 
| nice | nice(1) | タイムシェアリングプロセスの優先度を変更する | 
| psrset | psrset(1M) | 特定のプロセスグループを、1 つのプロセッサではなく、プロセッサのグループに結合する | 
Solaris 管理コンソールの プロセスツールを使用すると、ユーザーフレンドリなインタフェースによるプロセスを管理できます。Solaris 管理コンソールの使用と起動の方法については、『Solaris のシステム管理 (基本編)』の「Solaris 管理コンソールの操作 (手順)」を参照してください。
ps コマンドを使用すると、システム上で活動中のプロセスの状態をチェックできます。また、プロセスについての技術的な情報も表示できます。このデータは、プロセスの優先順位をどのように設定するか判断するなどの管理作業に利用できます。
ps コマンドを使用すると、システム上で活動中のプロセスの状態をチェックできます。使用するオプションに応じて、次の情報が表示されます。
プロセスの現在の状態
プロセス ID
親プロセス ID
ユーザー ID
スケジューリングクラス
優先順位
プロセスのアドレス
使用したメモリー
使用した CPU 時間
次の表では、ps コマンドを使用して報告されるいくつかのフィールドについて説明します。どのフィールドが表示されるかは、選択するオプションによって異なります。使用可能なすべてのオプションについては、ps(1) のマニュアルページを参照してください。
表 23–2 ps により出力されるフィールド| フィールド | 説明 | 
|---|---|
| UID | |
| PID | プロセス ID | 
| PPID | 親プロセス ID | 
| C | スケジューリングのためのプロセッサ使用率。このフィールドは -c オプションを使用すると表示されない | 
| CLS | プロセスが所属するスケジューリングクラス。リアルタイム、システム、またはタイムシェアリングのいずれか。このフィールドは、-c オプションを指定した場合にのみ表示される | 
| PRI | カーネルスレッドのスケジューリング優先順位。番号が大きいほど優先順位が高い | 
| NI | プロセスの nice 番号。これは、スケジュール優先順位に影響する。プロセスの nice 番号を大きくすると、その優先順位が下がる | 
| ADDR | proc 構造体のアドレス | 
| SZ | プロセスの仮想アドレスサイズ | 
| WCHAN | プロセスが休眠中のイベントまたはロックのアドレス | 
| STIME | プロセスの起動時刻 (時、分、秒) | 
| TTY | プロセス (またはその親プロセス) が起動された端末。疑問符は、制御端末がないことを示す | 
| TIME | プロセスの起動以降に使用した合計 CPU 時間 | 
| CMD | プロセスを生成したコマンド | 
ps コマンドを使用して、システム上で実行中のすべてのプロセスを表示することができます。
| $ ps [-efc] | 
| ps | ログインセッションに関連するプロセスのみを表示する | 
| -ef | システム上で実行中のすべてのプロセスに関する詳細情報を表示する | 
| -c | プロセススケジューラ情報を表示する | 
次の例は、オプションを指定しないときの ps コマンドからの出力を示します。
| $ ps PID TTY TIME COMD 1664 pts/4 0:06 csh 2081 pts/4 0:00 ps | 
次の例は、ps -ef の出力を示します。この出力例は、システムのブート時に最初に実行されたプロセスが sched (スワッパ) であり、それに続いて init プロセス、pageout の順に実行されたことを示しています。
| $ ps -ef
     UID   PID  PPID  C    STIME TTY      TIME CMD
    root     0     0  0   Dec 20 ?        0:17 sched
    root     1     0  0   Dec 20 ?        0:00 /etc/init -
    root     2     0  0   Dec 20 ?        0:00 pageout
    root     3     0  0   Dec 20 ?        4:20 fsflush
    root   374   367  0   Dec 20 ?        0:00 /usr/lib/saf/ttymon
    root   367     1  0   Dec 20 ?        0:00 /usr/lib/saf/sac -t 300
    root   126     1  0   Dec 20 ?        0:00 /usr/sbin/rpcbind
    root    54     1  0   Dec 20 ?        0:00 /usr/lib/sysevent/syseventd
    root    59     1  0   Dec 20 ?        0:00 /usr/lib/picl/picld
    root   178     1  0   Dec 20 ?        0:03 /usr/lib/autofs/automountd
    root   129     1  0   Dec 20 ?        0:00 /usr/sbin/keyserv
    root   213     1  0   Dec 20 ?        0:00 /usr/lib/lpsched
    root   154     1  0   Dec 20 ?        0:00 /usr/sbin/inetd -s
    root   139     1  0   Dec 20 ?        0:00 /usr/lib/netsvc/yp/ypbind ...
    root   191     1  0   Dec 20 ?        0:00 /usr/sbin/syslogd
    root   208     1  0   Dec 20 ?        0:02 /usr/sbin/nscd
    root   193     1  0   Dec 20 ?        0:00 /usr/sbin/cron
    root   174     1  0   Dec 20 ?        0:00 /usr/lib/nfs/lockd
  daemon   175     1  0   Dec 20 ?        0:00 /usr/lib/nfs/statd
    root   376     1  0   Dec 20 ?        0:00 /usr/lib/ssh/sshd
    root   226     1  0   Dec 20 ?        0:00 /usr/lib/power/powerd
    root   315     1  0   Dec 20 ?        0:00 /usr/lib/nfs/mountd
    root   237     1  0   Dec 20 ?        0:00 /usr/lib/utmpd
    .
    .
    .     | 
プロセスコマンドを使用すると、 /proc ディレクトリにあるプロセスに関する詳細情報を表示できます。/proc ディレクトリは プロセスファイルシステム (PROCFS) とも呼ばれます。アクティブなプロセスのイメージは、そのプロセス ID 番号を使って /proc に格納されます。
プロセスツールは ps コマンドの一部のオプションに似ていますが、このツールから提供される出力の方が詳細です。プロセスコマンドには次の機能があります。
いくつかのプロセスコマンドを使用すると、アクティブなプロセスに関する詳細な技術情報を表示したり、そのプロセスを制御したりできます。 表 23–3に、いくつかの/proc コマンドを示します。
プロセスが無限ループ内でトラップされた場合や、実行時間が長すぎる場合は、プロセスを終了 (kill) できます。pkill コマンドを使用してプロセスを終了する方法については、第 23 章「システムプロセスの管理 (手順)」を参照してください。
/proc ファイルシステムは、状態情報と制御機能のためのサブディレクトリを含むディレクトリ階層です。
/proc ファイルシステムは、ウォッチポイント機能も提供します。この機能は、プロセスのアドレス領域の個々のページの読み取り権または書き込み権を再マップするために使用されます。この機能は制限がなく、MT-safe です。
デバッグ用ツールは、/proc の新しいウォッチポイント機能を使用するように変更されています。つまり、ウォッチポイントプロセス全体がより高速になったためです。
dbx デバッグ用ツールを使用してウォッチポイントを設定するときの次の制限は取り除かれました。
SPARC レジスタウィンドウのため、スタック上のローカル変数にウォッチポイントを設定する。
マルチスレッド化されたプロセスにウォッチポイントを設定する。
詳細については、proc(4)、core(4)、および mdb(1) のマニュアルページを参照してください。
表 23–3 /proc プロセスコマンド| プロセスコマンド | 説明 | 
|---|---|
| pcred | プロセスの資格情報を表示する | 
| pfiles | プロセス内で開いているファイルに関する fstat 情報と fcntl 情報を表示する | 
| pflags | /proc 追跡フラグ、保留状態のシグナルと保持状態のシグナル、他の状態情報を出力する | 
| pldd | プロセスにリンクされている動的ライブラリを表示する | 
| pmap | 各プロセスのアドレス空間マップを表示する | 
| psig | 各プロセスのシグナルの動作とハンドラを表示する | 
| prun | 各プロセスを開始する | 
| pstack | 各プロセス内の LWP の 16 進とシンボルのスタックトレースを出力する | 
| pstop | 各プロセスを停止する | 
| ptime | microstate アカウントを使用してプロセスの時間を測定する | 
| ptree | プロセスを含むプロセスツリーを表示する | 
| pwait | プロセス終了後の状態情報を表示する | 
| pwdx | プロセスの現在の作業ディレクトリを表示する | 
詳細については、proc(1) のマニュアルページを参照してください。
詳細を表示したいプロセスのプロセス ID を表示します。
| # pgrep process | 
process は、詳細を表示したいプロセスの名前です。
プロセス ID は、出力の第 1 列目に表示されます。
表示したいプロセス情報を表示します。
| # /usr/bin/pcommand pid | 
| pcommand | 実行したいプロセスツールコマンド。表 23–3 を参照 | 
| pid | プロセス ID | 
次の例は、プロセスツールコマンドを使用して lpsched プロセスに関する詳細情報を表示する方法を示しています。
| # pgrep lpsched 1
213
# pwdx 213 2
213:    /
# ptree 213 3
213   /usr/lib/lpsched
# pfiles 213 4
213:    /usr/lib/lpsched
  Current rlimit: 4096 file descriptors
   0: S_IFIFO mode:0000 dev:270,0 ino:67 uid:0 gid:0 size:0
      O_RDWR
   1: S_IFIFO mode:0000 dev:270,0 ino:67 uid:0 gid:0 size:0
      O_RDWR
   3: S_IFCHR mode:0666 dev:136,0 ino:35882 uid:0 gid:3 rdev:21,0
      O_WRONLY FD_CLOEXEC
   4: S_IFDOOR mode:0444 dev:275,0 ino:18526 uid:0 gid:0 size:0
      O_RDONLY|O_LARGEFILE FD_CLOEXEC  door to nscd[208]
   5: S_IFREG mode:0664 dev:136,0 ino:64648 uid:71 gid:8 size:0
      O_WRONLY | 
lpsched のプロセス ID を表示します。
lpsched の現在の作業ディレクトリを表示します。
lpsched が入っているプロセスツリーを表示します。
fstat と fcntl の情報を表示します。
制御するプロセスのプロセス ID を表示します。
| # pgrep process | 
process は、制御するプロセスの名前です。
プロセスの ID は、出力の第 1 列目に表示されます。
適切なプロセスコマンドを使用してプロセスを制御します。
| # /usr/bin/pcommand pid | 
| pcommand | 実行したいプロセスコマンド。表 23–3 を参照 | 
| pid | プロセス ID | 
プロセス状態を確認します。
| # ps -ef | grep PID | 
次の例は、プロセスツールを使用して dtpad を停止し再開する方法を示しています。
| # pgrep dtpad 1 2921 # pstop 2921 2 # prun 2921 3 | 
dtpad のプロセス ID を表示する
dtpad プロセスを停止する
dtpad プロセスを再開する
プロセスを強制的に終了 (kill) しなければならない場合があります。プロセスが無限ループに入っていたり、大きいジョブを開始したが完了する前に停止したい場合があります。所有しているプロセスであれば、どれでも終了できます。また、スーパーユーザーはプロセス ID が 0、1、2、3、4 のものを除き、システム上のどんなプロセスでも終了できます。プロセス ID が 0、1、2、3、4 のプロセスを終了させると、システムがクラッシュする可能性があります。
詳細については、pgrep(1) のマニュアルページを参照してください。