Oracle® Solaris 11.2 でのシステム情報、プロセス、およびパフォーマンスの管理

印刷ビューの終了

更新: 2014 年 9 月
 
 

システムプロセスを管理するコマンド

次の表では、システムプロセスを管理するためのコマンドについて説明します。

表 2-1  プロセスを管理するためのコマンド
コマンド
説明
マニュアルページ
pspgrepprstatpkill
システム上のアクティブなプロセスのステータスをチェックし、プロセスについての詳細な情報も表示します。
ps(1)pgrep(1)、および prstat(1M)
pkill
pgrep と同様に機能するが、名前または他の属性によってプロセスを検索またはシグナルを送信して、プロセスを終了します。一致したプロセスのプロセス ID を出力するのではなく、kill コマンドと同様に、各プロセスにシグナルを送信します。
pgrep(1)、および pkill(1)
pargs、preap
プロセスのデバッグを支援します。
pargs(1)、および preap(1)
dispadmin
デフォルトのプロセススケジューリングポリシーを表示します。
priocntl
プロセスに優先順位クラスを割り当てて、プロセスの優先度を管理します。
nice
タイムシェアリングプロセスの優先度を変更します。
psrset
特定のプロセスグループを、1 つのプロセッサではなく、プロセッサのグループに結合します。

ps コマンドの使用

ps コマンドを使用すると、システム上で活動中のプロセスのステータスをチェックでし、プロセスについての技術的な情報も表示できます。このデータは、プロセスの優先順位の設定方法を決定するときなど、各種の管理タスクに利用できます。

    使用するオプションに応じて、ps コマンドは次の情報を表示します。

  • プロセスの現在のステータス

  • プロセス ID

  • 親プロセス ID

  • ユーザー ID

  • スケジューリングクラス

  • 優先順位

  • プロセスのアドレス

  • 使用したメモリー

  • 使用した CPU 時間

次の表では、ps コマンドによって報告されるいくつかのフィールドについて説明します。表示されるフィールドは、選択するオプションによって異なります。使用可能なすべてのオプションについては、ps(1) のマニュアルページを参照してください。

UID

プロセス所有者の実効ユーザー ID。

PID

プロセス ID。

PPID

親プロセス ID

C

スケジューリングのためのプロセッサ使用率。このフィールドは –c オプションを使用すると表示されない

CLS

プロセスが所属するスケジューリングクラス。リアルタイム、システム、またはタイムシェアリングのいずれか。このフィールドは、–c オプションを指定した場合にのみ表示される

PRI

カーネルスレッドのスケジューリング優先順位。番号が大きいほど優先順位が高い

NI

プロセスの nice 値。これは、スケジュール優先順位に影響する。プロセスの nice 値を大きくすると、その優先順位が下がる

ADDR

proc 構造体のアドレス

SZ

プロセスの仮想アドレスサイズ

WCHAN

プロセスが休眠中のイベントまたはロックのアドレス

STIME

プロセスの起動時間 (時、分、秒)

TTY

プロセス (またはその親プロセス) が起動された端末。疑問符は、制御端末がないことを示す

TIME

プロセスの起動以降に使用した合計 CPU 時間

CMD

プロセスを生成したコマンド

/proc ファイルシステムとコマンド

プロセスコマンドを使用すると、/proc ディレクトリにあるプロセスに関する詳細情報を表示できます。次の表に、/proc プロセスコマンドを示します。/proc ディレクトリは プロセスファイルシステム (PROCFS) とも呼ばれます。アクティブなプロセスのイメージは、そのプロセス ID 番号を使って PROCFS に格納されます。

表 2-2  プロセスコマンド (/proc)
プロセスコマンド
説明
pcred
プロセスの資格情報を表示する
pfiles
プロセス内で開いているファイルに関する fstat 情報と fcntl 情報を表示する
pflags
/proc 追跡フラグ、保留状態のシグナルと保持状態のシグナル、その他のステータス情報を表示する
pldd
プロセスにリンクされている動的ライブラリを表示する
pmap
各プロセスのアドレス空間マップを表示する
psig
各プロセスのシグナルの動作とハンドラを表示する
prun
各プロセスを開始する
pstack
各プロセス内の軽量プロセスの 16 進とシンボルのスタックトレースを表示する
pstop
各プロセスを停止する
ptime
microstate アカウントを使用してプロセスの時間を測定する
ptree
プロセスを含むプロセスツリーを表示する
pwait
プロセス終了後のステータス情報を表示する
pwdx
プロセスの現在の作業ディレクトリを表示する

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

プロセスツールは ps コマンドの一部のオプションに似ていますが、このツールから提供される出力の方が詳細です。

    プロセスコマンドには次の機能があります。

  • fstatfcntl、作業ディレクトリ、親プロセスと子プロセスのツリーなど、プロセスに関する詳細情報を表示します。

  • ユーザーがプロセスを停止または再開できるように、プロセスに対する制御を提供します。

プロセスコマンド (/proc) を使用したプロセスの管理

一部のプロセスコマンドを使用して、プロセスに関する詳細な技術情報を表示したり、アクティブなプロセスを制御したりできます。Table 2–2 に一部の /proc コマンドを示しています。

プロセスが無限ループに陥った場合や、実行時間が長すぎる場合は、プロセスを終了 (強制終了) できます。kill コマンドまたは pkill コマンドを使用してプロセスを終了する方法については、Chapter 2, システムプロセスの管理を参照してください。

/proc ファイルシステムは、状態情報と制御機能のためのサブディレクトリを含むディレクトリ階層です。

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

デバッグ用ツールは、xwatchpoint 機能を使用するように変更されており、xwatchpoint プロセス全体がより高速になっています。

    dbx デバッグ用ツールを使用して xwatchpoints を設定する際の、次の制限はなくなりました。

  • SPARC ベースシステムのレジスタウィンドウのため、スタック上のローカル変数に xwatchpoints を設定する。

  • マルチスレッド化されたプロセスに xwatchpoints を設定する。

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

プロセスを表示する方法

  • ps コマンドを使用して、システム上のすべてのプロセスを表示します。
    $ ps [-efc]
    ps

    ログインセッションに関連するプロセスのみを表示する

    –ef

    システム上で実行中のすべてのプロセスに関する詳細情報を表示する

    –c

    プロセススケジューラ情報を表示する

使用例 2-1  プロセスを表示する

次の例は、オプションを指定しないときの 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 18:04:04 ?           0:15 sched
    root     5     0   0 18:04:03 ?           0:05 zpool-rpool
    root     1     0   0 18:04:05 ?           0:00 /sbin/init
    root     2     0   0 18:04:05 ?           0:00 pageout
    root     3     0   0 18:04:05 ?           2:52 fsflush
    root     6     0   0 18:04:05 ?           0:02 vmtasks
  daemon   739     1   0 19:03:58 ?           0:00 /usr/lib/nfs/nfs4cbd
    root     9     1   0 18:04:06 ?           0:14 /lib/svc/bin/svc.startd
    root    11     1   0 18:04:06 ?           0:45 /lib/svc/bin/svc.configd
  daemon   559     1   0 18:04:49 ?           0:00 /usr/sbin/rpcbind
  netcfg    47     1   0 18:04:19 ?           0:01 /lib/inet/netcfgd
   dladm    44     1   0 18:04:17 ?           0:00 /sbin/dlmgmtd
  netadm    51     1   0 18:04:22 ?           0:01 /lib/inet/ipmgmtd
    root   372   338   0 18:04:43 ?           0:00 /usr/lib/hal/hald-addon-cpufreq
    root    67     1   0 18:04:30 ?           0:02 /lib/inet/in.mpathd
    root   141     1   0 18:04:38 ?           0:00 /usr/lib/pfexecd
  netadm    89     1   0 18:04:31 ?           0:03 /lib/inet/nwamd
    root   602     1   0 18:04:50 ?           0:02 /usr/lib/inet/inetd start
    root   131     1   0 18:04:35 ?           0:01 /sbin/dhcpagent
  daemon   119     1   0 18:04:33 ?           0:00 /lib/crypto/kcfd
    root   333     1   0 18:04:41 ?           0:07 /usr/lib/hal/hald --daemon=yes
    root   370   338   0 18:04:43 ?           0:00 /usr/lib/hal/hald-addon-network-discovery
    root   159     1   0 18:04:39 ?           0:00 /usr/lib/sysevent/syseventd
    root   236     1   0 18:04:40 ?           0:00 /usr/lib/ldoms/drd
    root   535     1   0 18:04:46 ?           0:09 /usr/sbin/nscd
    root   305     1   0 18:04:40 ?           0:00 /usr/lib/zones/zonestatd
    root   326     1   0 18:04:41 ?           0:03 /usr/lib/devfsadm/devfsadmd
    root   314     1   0 18:04:40 ?           0:00 /usr/lib/dbus-daemon --system
    .
		.
		.

プロセスに関する情報を表示する方法

  1. 詳細を表示したいプロセスのプロセス ID を表示します。
    # pgrep process

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

  2. プロセス情報を表示します。
    # /usr/bin/pcommand PID
    pcommand

    実行するプロセスコマンド。Table 2–2 に、これらのコマンドを示して説明しています。

    PID

    プロセス ID

使用例 2-2  プロセスに関する情報を表示する

次の例は、プロセスコマンドを使用して cron プロセスに関する詳細情報を表示する方法を示しています。

# pgrep cron Obtains the process ID for the cron process
4780
# pwdx 4780 Displays the current working directory for the cron process
4780:   /var/spool/cron/atjobs
# ptree 4780 Displays the process tree that contains the cron process
4780  /usr/sbin/cron
# pfiles 4780 Displays fstat and fcntl information
4780:   /usr/sbin/cron
  Current rlimit: 256 file descriptors
   0: S_IFCHR mode:0666 dev:290,0 ino:6815752 uid:0 gid:3 rdev:13,2
      O_RDONLY|O_LARGEFILE
      /devices/pseudo/mm@0:null
   1: S_IFREG mode:0600 dev:32,128 ino:42054 uid:0 gid:0 size:9771
      O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE
      /var/cron/log
   2: S_IFREG mode:0600 dev:32,128 ino:42054 uid:0 gid:0 size:9771
      O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE
      /var/cron/log
   3: S_IFIFO mode:0600 dev:32,128 ino:42049 uid:0 gid:0 size:0
      O_RDWR|O_LARGEFILE
      /etc/cron.d/FIFO
   4: S_IFIFO mode:0000 dev:293,0 ino:4630 uid:0 gid:0 size:0
      O_RDWR|O_NONBLOCK
   5: S_IFIFO mode:0000 dev:293,0 ino:4630 uid:0 gid:0 size:0
      O_RDWR

プロセスを制御する方法

  1. 制御するプロセスのプロセス ID を表示します。
    # pgrep process

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

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

    実行するプロセスコマンド。Table 2–2 に、これらのコマンドを示して説明しています。

    PID

    プロセス ID

  3. プロセスステータスを確認します。
    # ps -ef | grep PID

プロセスの終了 (pkill、kill)

無限ループのプロセスを停止 (強制終了) したり、大規模なジョブの完了前に停止したりする必要が生じる場合があります。所有しているプロセスであれば、どれでも終了できます。システム管理者は、プロセス ID が 0123、および 4 のプロセス以外のすべてのプロセスを強制終了できます。プロセス ID が 0、1、2、3、4 のプロセスを終了させると、システムがクラッシュする可能性があります。

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

プロセスを終了させる方法 (pkill)

  1. ()ほかのユーザーのプロセスを終了するには、root 役割になります。
  2. 終了したいプロセスのプロセス ID を表示します。
    $ pgrep process

    例:

    $ pgrep netscape
    587
    566

    プロセス ID が出力に表示されます。


    注 -  Sun Ray システムのプロセス情報を取得するには、次のコマンドを使用します。

    すべてのユーザープロセスを一覧表示するには:

    # ps -fu user

    ユーザーによって所有される特定のプロセスを特定するには:

    # ps -fu user | grep process

  3. プロセスを終了します。
    $ pkill [signal] PID
    signal

    pkill コマンド行構文にシグナルが何も含まれない場合は、使用されるデフォルトシグナルは -15 (SIGKILL)。-9 シグナル (SIGTERM) を pkill コマンドで使用すると、プロセスをただちに終了できる。ただし -9 シグナルは、データが失われる可能性があるため、データベースプロセスや LDAP サーバープロセスなどのプロセスを強制終了するために使用してはならない。

    PID

    停止するプロセスの名前。


    ヒント  -  pkill コマンドを使用してプロセスを終了する場合は、まず、シグナルオプションを使用せずにコマンドだけで試行してみます。プロセスが数分後に終了しない場合は、-9 シグナルを付けて pkill コマンドを使用します。
  4. プロセスが終了したことを確認します。
    $ pgrep process

    終了したプロセスは、pgrep コマンドの出力に表示されないはずです。

プロセスを終了させる方法 (kill)

  1. ()ほかのユーザーのプロセスを終了するには、root 役割になります。
  2. 終了したいプロセスのプロセス ID を表示します。
    # ps -fu user

    ここで、user はプロセスの所有者です。

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

  3. プロセスを終了します。
    # kill [signal-number] PID
    signal

    pkill コマンド行構文にシグナルが何も含まれない場合は、使用されるデフォルトシグナルは -15 (SIGKILL)。-9 シグナル (SIGTERM) を pkill コマンドで使用すると、プロセスをただちに終了できる。ただし -9 シグナルは、データが失われる可能性があるため、データベースプロセスや LDAP サーバープロセスなどのプロセスを強制終了するために使用してはならない。

    PID

    終了したいプロセスのプロセス ID


    ヒント  - kill コマンドを使用してプロセスを終了する場合は、まず、シグナルオプションを使用せずにコマンドだけで試行してみます。数分待ってプロセスが終了しなければ、kill コマンドに -9 シグナルを付けて使用します。
  4. プロセスが終了したことを確認します。
    $ ps

    終了したプロセスは、ps コマンドの出力に表示されないはずです。

プロセスのデバッグ (pargs preap)

pargs コマンドと preap コマンドは、プロセスのデバッグを改善します。pargs コマンドを使用すると、動作中のプロセスまたはコアファイルに関連付けられた引数と環境変数を表示できます。preap コマンドを使用すると、終了した (ゾンビ) プロセスを削除できます。ゾンビプロセスとは、その終了ステータスがまだ親に回収されていないプロセスをいいます。これらのプロセスは概して無害ですが、数が多ければシステムリソースを消費します。pargs コマンドと preap コマンドを使用して、ユーザーの検査権限に含まれるすべてのプロセスを検査できます。管理者になると、すべてのプロセスを検査できます。

preap コマンドの使用については、preap(1) のマニュアルページを参照してください。pargs コマンドの使用については、pargs(1) のマニュアルページを参照してください。proc(1) のマニュアルページも参照してください。

使用例 2-3  プロセスをデバッグする (pargs)

pargs コマンドによって、プロセスに渡された引数を ps コマンドで一部しか表示できないという問題がようやく解決されました。次の例では、pargs コマンドを pgrep コマンドと併用して、プロセスに渡された引数を表示する方法を示します。

# pargs `pgrep ttymon`
579:	/usr/lib/saf/ttymon -g -h -p system-name console login:  
-T sun -d /dev/console -l 
argv[0]: /usr/lib/saf/ttymon
argv[1]: -g
argv[2]: -h
argv[3]: -p
argv[4]: system-name console login: 
argv[5]: -T
argv[6]: sun
argv[7]: -d
argv[8]: /dev/console
argv[9]: -l
argv[10]: console
argv[11]: -m
argv[12]: ldterm,ttcompat
548:	/usr/lib/saf/ttymon
argv[0]: /usr/lib/saf/ttymon

次の例では、pargs –e コマンドを使用して、プロセスに関連付けられた環境変数を表示する方法を示します。

$ pargs -e 6763
6763: tcsh
envp[0]: DISPLAY=:0.0