JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Solaris のシステム管理 (上級編)     Oracle Solaris 10 8/11 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  端末とモデムの管理 (概要)

2.  端末とモデムの設定 (手順)

3.  サービスアクセス機能によるシリアルポートの管理 (手順)

4.  システム資源の管理 (概要)

5.  システム情報の表示と変更 (手順)

6.  ディスク使用の管理 (手順)

7.  UFS 割り当て制限の管理 (手順)

8.  システムタスクのスケジュール設定 (手順)

9.  システムアカウンティングの設定と管理 (手順)

10.  システムアカウンティング (リファレンス)

11.  システムパフォーマンスの管理 (概要)

12.  システムプロセスの管理 (手順)

システムプロセスの管理 (作業マップ)

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

ps コマンドの使用

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

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

プロセスを表示する方法

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

プロセスを制御する方法

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

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

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

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

プロセスクラス情報の管理 (作業マップ)

プロセスクラス情報の管理

プロセスのスケジュール優先順位の変更 (priocntl)

プロセスクラスに関する基本情報を表示する方法 (priocntl)

プロセスのグローバル優先順位を表示する方法

プロセスの優先順位を指定する方法 (priocntl)

タイムシェアリングプロセスのスケジューリングパラメータを変更する方法 (priocntl)

プロセスのクラスを変更する方法 (priocntl)

タイムシェアリングプロセスの優先順位の変更 (nice)

プロセスの優先順位を変更する方法 (nice)

システムのプロセスに関する問題解決方法

13.  システムパフォーマンスの監視 (手順)

14.  ソフトウェアの問題解決 (概要)

15.  システムメッセージの管理

16.  コアファイルの管理 (手順)

17.  システムクラッシュ情報の管理 (手順)

18.  ソフトウェアで発生するさまざまな問題の解決 (手順)

19.  ファイルアクセスでの問題の解決 (手順)

20.  UFS ファイルシステムの不整合解決 (手順)

21.  ソフトウェアパッケージで発生する問題の解決 (手順)

索引

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

次の表では、プロセス情報を管理するために使用されるコマンドについて説明します。

表 12-1 プロセスを管理するためのコマンド

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

Solaris Management Console のプロセスツールを使用すると、ユーザーフレンドリなインタフェースでプロセスを管理できます。Solaris Management Console の使用と起動の方法については、『Solaris のシステム管理 (基本編)』の第 2 章「Solaris 管理コンソールの操作 (手順)」を参照してください。

ps コマンドの使用

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

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

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

表 12-2 ps により出力されるフィールド

フィールド
説明
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 番号を使って /proc に格納されます。

表 12-3 プロセスコマンド (/proc)

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

詳細については、proc(1) を参照してください。

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

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

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

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

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

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

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

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

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

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

プロセスを表示する方法

例 12-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   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
    .
    .
    .    

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

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

    process は、詳細を表示したいプロセスの名前です。

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

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

    実行したい (/proc) コマンド。これらのコマンドについては表 12-3 を参照

    pid

    プロセス ID

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

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

# pgrep cron 1
4780
# pwdx 4780 2
4780:   /var/spool/cron/atjobs
# ptree 4780 3
4780  /usr/sbin/cron
# pfiles 4780 4
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. cron プロセスのプロセス ID を表示する。

  2. cron プロセスの現在の作業ディレクトリを表示する

  3. cron プロセスを含むプロセスツリーを表示する

  4. fstatfcntl の情報を表示する

プロセスを制御する方法

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

    process は、制御するプロセスの名前です。

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

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

    実行したいプロセス (/proc) コマンド。これらのコマンドについては表 12-3 を参照

    pid

    プロセス ID

  3. プロセス状態を確認します。
    # ps -ef | grep pid

例 12-3 プロセスを制御する

次の例は、プロセスコマンドを使用して dtpad プロセスを停止し再開する方法を示しています。

# pgrep dtpad 1
2921
# pstop 29212 
# prun 2921 3
  1. dtpad プロセスのプロセス ID を表示する

  2. dtpad プロセスを停止する

  3. dtpad プロセスを再開する

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

プロセスを強制的に終了 (kill) しなければならない場合があります。プロセスが無限ループに入る場合があります。大きいジョブを開始したが完了する前に停止したい場合があります。所有しているプロセスであれば、どれでも終了できます。また、スーパーユーザーはプロセス ID が 0123、および 4 のものを除き、システム上のどんなプロセスでも終了できます。プロセス ID が 0、1、2、3、4 のプロセスを終了させると、システムがクラッシュする可能性があります。

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

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

  1. (省略可能) 別のユーザーのプロセスを終了するには、スーパーユーザーになるか、同等の役割になります。
  2. 終了したいプロセスのプロセス ID を表示します。
    $ pgrep process

    process は、終了したいプロセスの名前です。

    次に例を示します。

    $ pgrep netscape
    587
    566

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


    注 - Sun Ray のプロセス情報を表示するには、次のコマンドを使用します。

    # ps -fu user

    このコマンドは、このユーザーのすべてのプロセスを表示します。

    # ps -fu user | grep process

    このコマンドは、ユーザーの特定のプロセスを検索します。


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

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

    process

    停止するプロセスの名前


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


  4. プロセスが終了したことを確認します。
    $ pgrep process

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

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

  1. (省略可能) 別のユーザーのプロセスを終了するには、スーパーユーザーになるか、同等の役割になります。
  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. プロセスが終了したことを確認します。
    $ pgrep pid

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

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

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

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

例 12-4 プロセスをデバッグする (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