次の表では、システムプロセスを管理するためのコマンドについて説明します。
|
ps コマンドを使用すると、システム上で活動中のプロセスのステータスをチェックでし、プロセスについての技術的な情報も表示できます。このデータは、プロセスの優先順位の設定方法を決定するときなど、各種の管理タスクに利用できます。
使用するオプションに応じて、ps コマンドは次の情報を表示します。
プロセスの現在のステータス
プロセス ID
親プロセス ID
ユーザー ID
スケジューリングクラス
優先順位
プロセスのアドレス
使用したメモリー
使用した CPU 時間
次の表では、ps コマンドによって報告されるいくつかのフィールドについて説明します。表示されるフィールドは、選択するオプションによって異なります。使用可能なすべてのオプションについては、ps(1) のマニュアルページを参照してください。
プロセス ID。
親プロセス ID
スケジューリングのためのプロセッサ使用率。このフィールドは –c オプションを使用すると表示されない
プロセスが所属するスケジューリングクラス。リアルタイム、システム、またはタイムシェアリングのいずれか。このフィールドは、–c オプションを指定した場合にのみ表示される
カーネルスレッドのスケジューリング優先順位。番号が大きいほど優先順位が高い
プロセスの nice 値。これは、スケジュール優先順位に影響する。プロセスの nice 値を大きくすると、その優先順位が下がる
proc 構造体のアドレス
プロセスの仮想アドレスサイズ
プロセスが休眠中のイベントまたはロックのアドレス
プロセスの起動時間 (時、分、秒)
プロセス (またはその親プロセス) が起動された端末。疑問符は、制御端末がないことを示す
プロセスの起動以降に使用した合計 CPU 時間
プロセスを生成したコマンド
プロセスコマンドを使用すると、/proc ディレクトリにあるプロセスに関する詳細情報を表示できます。次の表に、/proc プロセスコマンドを示します。/proc ディレクトリは プロセスファイルシステム (PROCFS) とも呼ばれます。アクティブなプロセスのイメージは、そのプロセス ID 番号を使って PROCFS に格納されます。
|
詳細は、proc(1) のマニュアルページを参照してください。
プロセスツールは ps コマンドの一部のオプションに似ていますが、このツールから提供される出力の方が詳細です。
一部のプロセスコマンドを使用して、プロセスに関する詳細な技術情報を表示したり、アクティブなプロセスを制御したりできます。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 [-efc]
ログインセッションに関連するプロセスのみを表示する
システム上で実行中のすべてのプロセスに関する詳細情報を表示する
プロセススケジューラ情報を表示する
次の例は、オプションを指定しないときの 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 . . .
# pgrep process
プロセス ID は、出力の第 1 列目に表示されます。
# /usr/bin/pcommand PID
実行するプロセスコマンド。Table 2–2 に、これらのコマンドを示して説明しています。
プロセス ID
次の例は、プロセスコマンドを使用して 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
# pgrep process
プロセス ID は、出力の第 1 列目に表示されます。
# /usr/bin/pcommand PID
実行するプロセスコマンド。Table 2–2 に、これらのコマンドを示して説明しています。
プロセス ID
# ps -ef | grep PID
無限ループのプロセスを停止 (強制終了) したり、大規模なジョブの完了前に停止したりする必要が生じる場合があります。所有しているプロセスであれば、どれでも終了できます。システム管理者は、プロセス ID が 0、1、2、3、および 4 のプロセス以外のすべてのプロセスを強制終了できます。プロセス ID が 0、1、2、3、4 のプロセスを終了させると、システムがクラッシュする可能性があります。
詳細は、pgrep(1)、pkill(1)、および kill(1) のマニュアルページを参照してください。
$ pgrep process
例:
$ pgrep netscape 587 566
プロセス ID が出力に表示されます。
すべてのユーザープロセスを一覧表示するには:
# ps -fu user
ユーザーによって所有される特定のプロセスを特定するには:
# ps -fu user | grep process
$ pkill [signal] PID
pkill コマンド行構文にシグナルが何も含まれない場合は、使用されるデフォルトシグナルは -15 (SIGKILL)。-9 シグナル (SIGTERM) を pkill コマンドで使用すると、プロセスをただちに終了できる。ただし -9 シグナルは、データが失われる可能性があるため、データベースプロセスや LDAP サーバープロセスなどのプロセスを強制終了するために使用してはならない。
停止するプロセスの名前。
$ pgrep process
終了したプロセスは、pgrep コマンドの出力に表示されないはずです。
# ps -fu user
ここで、user はプロセスの所有者です。
プロセス ID は、出力の第 1 列目に表示されます。
# kill [signal-number] PID
pkill コマンド行構文にシグナルが何も含まれない場合は、使用されるデフォルトシグナルは -15 (SIGKILL)。-9 シグナル (SIGTERM) を pkill コマンドで使用すると、プロセスをただちに終了できる。ただし -9 シグナルは、データが失われる可能性があるため、データベースプロセスや LDAP サーバープロセスなどのプロセスを強制終了するために使用してはならない。
終了したいプロセスのプロセス ID
$ ps
終了したプロセスは、ps コマンドの出力に表示されないはずです。
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