この章では、システムプロセスを管理する手順について説明します。
システムプロセスの管理に関する手順については、以下を参照してください。
システムプロセスの管理に関する基本情報については、以下を参照してください。
作業 |
説明 |
参照先 |
---|---|---|
プロセスを表示する |
ps コマンドを使用して、システム上のすべてのプロセスを表示する | |
プロセスについての情報を表示する |
pgrep コマンドを使用して、詳細情報を表示したいプロセスのプロセス ID を取得する | |
プロセスを制御する |
pgrep コマンドを使用して、プロセスを見つける。その後、適切な pcommand (/proc) を使用し、プロセスを制御する。(/proc) コマンドについては、表 12–3 を参照 | |
プロセスを強制終了する
|
プロセス名かプロセス ID を使用し、プロセスを見つける。pkill コマンドまたは kill コマンドを使用し、プロセスを終了する
|
次の表では、プロセス情報を管理するために使用されるコマンドについて説明します。
表 12–1 プロセスを管理するためのコマンド
コマンド |
説明 |
マニュアルページ |
---|---|---|
ps, pgrep, prstat, pkill |
システム上のアクティブなプロセスの状態をチェックします。また、プロセスについての詳細な情報を表示します。 |
ps(1)、pgrep(1)、および prstat(1M) |
pkill |
pgrep と同様に機能するが、名前または他の属性によってプロセスを検索またはシグナルを送信して、プロセスを終了します。一致したプロセスのプロセス ID を出力するのではなく、kill コマンドと同様に、各プロセスにシグナルを送信します。 | |
pargs, preap |
プロセスのデバッグを支援します。 | |
dispadmin |
デフォルトのプロセススケジューリングポリシーを表示します。 | |
priocntl |
プロセスに優先順位クラスを割り当てて、プロセスの優先度を管理します。 | |
nice |
タイムシェアリングプロセスの優先度を変更します。 | |
psrset |
特定のプロセスグループを、1 つのプロセッサではなく、プロセッサのグループに結合します。 |
Solaris 管理コンソールのプロセスツールを使用すると、ユーザーフレンドリなインタフェースでプロセスを管理できます。Solaris 管理コンソールの使用と起動の方法については、『Solaris のシステム管理 (基本編)』の第 2 章「Solaris 管理コンソールの操作 (手順)」を参照してください。
ps コマンドを使用すると、システム上で活動中のプロセスの状態をチェックできます。また、プロセスについての技術的な情報も表示できます。このデータは、プロセスの優先順位の設定方法を決定するときなど、各種の管理作業に利用できます。
使用するオプションに応じて、ps コマンドは以下の情報を報告します。
プロセスの現在の状態
プロセス ID
親プロセス ID
ユーザー ID
スケジューリングクラス
優先順位
プロセスのアドレス
使用したメモリー
使用した CPU 時間
次の表では、ps コマンドを使用して報告されるいくつかのフィールドについて説明します。どのフィールドが表示されるかは、選択するオプションによって異なります。使用可能なすべてのオプションについては、ps(1) のマニュアルページを参照してください。
表 12–2 ps により出力されるフィールド
フィールド |
説明 |
---|---|
UID | |
PID |
プロセス ID |
PPID |
親プロセス ID |
C |
スケジューリングのためのプロセッサ使用率。このフィールドは -c オプションを使用すると表示されない |
CLS |
プロセスが所属するスケジューリングクラス。リアルタイム、システム、またはタイムシェアリングのいずれか。このフィールドは、-c オプションを指定した場合にのみ表示される |
PRI |
カーネルスレッドのスケジューリング優先順位。番号が大きいほど優先順位が高い |
NI |
プロセスの nice 値。これは、スケジュール優先順位に影響する。プロセスの nice 値を大きくすると、その優先順位が下がる |
ADDR |
proc 構造体のアドレス |
SZ |
プロセスの仮想アドレスサイズ |
WCHAN |
プロセスが休眠中のイベントまたはロックのアドレス |
STIME |
プロセスの起動時刻 (時、分、秒) |
TTY |
プロセス (またはその親プロセス) が起動された端末。疑問符は、制御端末がないことを示す |
TIME |
プロセスの起動以降に使用した合計 CPU 時間 |
CMD |
プロセスを生成したコマンド |
プロセスコマンドを使用すると、/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 コマンドの一部のオプションに似ていますが、このツールから提供される出力の方が詳細です。
プロセスコマンドには次の機能があります。
一部のプロセスコマンドを使用して、プロセスに関する詳細な技術情報を表示したり、アクティブなプロセスを制御したりできます。表 12–3 に一部の /proc コマンドを示しています。
プロセスが無限ループに陥った場合や、実行時間が長すぎる場合は、プロセスを終了 (kill) できます。kill コマンドまたは pkill コマンドを使用してプロセスを終了する方法については、第 12 章システムプロセスの管理 (手順)を参照してください。
/proc ファイルシステムは、状態情報と制御機能のためのサブディレクトリを含むディレクトリ階層です。
/proc ファイルシステムは、xwatchpoint 機能も提供します。この機能は、プロセスのアドレス空間の個々のページの読み取り権または書き込み権を再マップするために使用されます。この機能は制限がなく、MT-safe です。
デバッグ用ツールは、/proc の xwatchpoint 機能を使用するように変更されています。つまり、xwatchpoint プロセス全体がより高速になっています。
dbx デバッグ用ツールを使用して xwatchpoint を設定する際の、次の制限はなくなりました。
SPARC レジスタウィンドウのため、スタック上のローカル変数に xwatchpoint を設定する。
マルチスレッド化されたプロセスに xwatchpoint を設定する。
詳細については、proc(4) およびmdb(1) のマニュアルページを参照してください。
ps コマンドを使用すると、システム上の全プロセスを表示できます。
$ 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 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 . . . |
詳細を表示したいプロセスのプロセス ID を表示します。
# pgrep process |
process は、詳細を表示したいプロセスの名前です。
プロセス ID は、出力の第 1 列目に表示されます。
表示したいプロセス情報を表示します。
# /usr/bin/pcommand pid |
実行したい (/proc) コマンド。これらのコマンドについては表 12–3 を参照
プロセス ID
次の例は、プロセスコマンドを使用して 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 |
cron プロセスのプロセス ID を表示する。
cron プロセスの現在の作業ディレクトリを表示する
cron プロセスを含むプロセスツリーを表示する
fstat と fcntl の情報を表示する
制御するプロセスのプロセス ID を表示します。
# pgrep process |
process は、制御するプロセスの名前です。
プロセス ID は、出力の第 1 列目に表示されます。
適切なプロセスコマンドを使用してプロセスを制御します。
# /usr/bin/pcommand pid |
実行したいプロセス (/proc) コマンド。これらのコマンドについては表 12–3 を参照
プロセス ID
プロセス状態を確認します。
# ps -ef | grep pid |
次の例は、プロセスコマンドを使用して dtpad プロセスを停止し再開する方法を示しています。
# pgrep dtpad 1 2921 # pstop 29212 # prun 2921 3 |
dtpad プロセスのプロセス ID を表示する
dtpad プロセスを停止する
dtpad プロセスを再開する
プロセスを強制的に終了 (kill) しなければならない場合があります。プロセスが無限ループに入る場合があります。大きいジョブを開始したが完了する前に停止したい場合があります。所有しているプロセスであれば、どれでも終了できます。また、スーパーユーザーはプロセス ID が 0、1、2、3、および 4 のものを除き、システム上のどんなプロセスでも終了できます。プロセス ID が 0、1、2、3、4 のプロセスを終了させると、システムがクラッシュする可能性があります。
詳細については、pgrep(1)、pkill(1)、およびkill(1) のマニュアルページを参照してください。
(省略可能) 別のユーザーのプロセスを終了するには、スーパーユーザーになるか、同等の役割になります。
終了したいプロセスのプロセス ID を表示します。
$ pgrep process |
process は、終了したいプロセスの名前です。
次に例を示します。
$ pgrep netscape 587 566 |
プロセス ID が出力に表示されます。
Sun Ray のプロセス情報を表示するには、次のコマンドを使用します。
# ps -fu user |
このコマンドは、このユーザーのすべてのプロセスを表示します。
# ps -fu user | grep process |
このコマンドは、ユーザーの特定のプロセスを検索します。
プロセスを終了します。
$ pkill [signal] process |
pkill コマンド行構文にシグナルが何も含まれない場合は、使用されるデフォルトシグナルは -15 (SIGKILL)。-9 シグナル (SIGTERM) を pkill コマンドで使用すると、プロセスをただちに終了できる。ただし -9 シグナルは、データベースプロセスや LDAP サーバープロセスなどのプロセスを終了するために使用してはならない。データが失われる可能性がある
停止するプロセスの名前
pkill コマンドを使用してプロセスを終了する場合は、まず、シグナルオプションを使用せずにコマンドだけで試行してみます。数分待ってプロセスが終了しなければ、pkill コマンドに -9 シグナルを付けて使用します。
プロセスが終了したことを確認します。
$ pgrep process |
終了したプロセスは、pgrep コマンドの出力に表示されないはずです。
(省略可能) 別のユーザーのプロセスを終了するには、スーパーユーザーになるか、同等の役割になります。
終了したいプロセスのプロセス ID を表示します。
$ ps -fu user |
user は、プロセスを表示したいユーザーです。
プロセス ID は、出力の第 1 列目に表示されます。
プロセスを終了します。
$ kill [signal-number] pid |
pkill コマンド行構文にシグナルが何も含まれない場合は、使用されるデフォルトシグナルは -15 (SIGKILL)。-9 シグナル (SIGTERM) を pkill コマンドで使用すると、プロセスをただちに終了できる。ただし -9 シグナルは、データベースプロセスや LDAP サーバープロセスなどのプロセスを終了するために使用してはならない。データが失われる可能性がある
終了したいプロセスのプロセス ID
kill コマンドを使用してプロセスを終了する場合は、まず、シグナルオプションを使用せずにコマンドだけで試行してみます。数分待ってプロセスが終了しなければ、kill コマンドに -9 シグナルを付けて使用します。
プロセスが終了したことを確認します。
$ pgrep pid |
終了したプロセスは、pgrep コマンドの出力に表示されないはずです。
pargs コマンドと preap コマンドは、プロセスのデバッグを改善します。pargs コマンドを使用すると、動作中のプロセスまたはコアファイルに関連付けられた引数と環境変数を表示できます。preap コマンドを使用すると、終了した (ゾンビ) プロセスを削除できます。ゾンビプロセスとは、その終了状態がまだ親に回収されていないプロセスをいいます。これらのプロセスは概して無害ですが、数が多ければシステム資源を消費します。pargs コマンドと preap コマンドを使用して、ユーザーの検査権限に含まれるすべてのプロセスを検査できます。スーパーユーザーは、すべてのプロセスを検査できます。
preap コマンドの使用方法については、preap(1) のマニュアルページを参照してください。pargs コマンドの使用方法については、pargs(1) のマニュアルページを参照してください。また、proc(1) のマニュアルページも参照してください。
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 |
作業 |
説明 |
参照先 |
---|---|---|
プロセスクラスに関する基本情報を表示する |
priocntl -l コマンドを使用し、プロセスのスケジューリングクラスと優先順位の範囲を表示する | |
プロセスのグローバル優先順位を表示する |
ps -ecl コマンドを使用し、プロセスのグローバル優先順位を表示する | |
プロセスに優先順位を割り当てる |
priocntl - e -c コマンドを使用し、割り当てた優先順位でプロセスを開始する | |
タイムシェアリングプロセスのスケジューリングパラメータを変更する |
priocntl -s -m コマンドを使用し、タイムシェアリングプロセスのスケジューリングパラメータを変更する | |
プロセスのクラスを変更する |
priocntl -s -c コマンドを使用し、プロセスのクラスを変更する | |
プロセスの優先順位を変更する |
/usr/bin/nice コマンドを適切なオプションとともに使用し、プロセスの優先順位を低くしたり高くしたりする |
次のリストは、システム上で構成可能なプロセススケジューリングクラスを示しています。タイムシェアリングクラスのユーザー優先順位の範囲も示しています。
プロセススケジューリングクラスの種類は次のとおりです。
プロセスのスケジュール優先順位とは、スケジュールポリシーに従ってプロセススケジューラによって割り当てられる優先順位のことです。dispadmin コマンドを使用すると、デフォルトのスケジュールポリシーを表示できます。詳細は、dispadmin(1M) のマニュアルページを参照してください。
priocntl コマンドを使用すると、プロセスを優先順位クラスに割り当てたり、プロセスの優先順位を管理したりできます。priocntl コマンドを使用してプロセスを管理する手順については、「プロセスの優先順位を指定する方法 (priocntl)」を参照してください。
次の例に priocntl -l コマンドからの出力を示します。
# priocntl -l CONFIGURED CLASSES ================== SYS (System Class) TS (Time Sharing) Configured TS User Priority Range: -60 through 60 FX (Fixed priority) Configured FX User Priority Range: 0 through 60 IA (Interactive) Configured IA User Priority Range: -60 through 60 |
次の例は、ps -ecl コマンドの出力を示します。PRI カラム内の値は、pageout プロセスが最上位の優先順位を持ち、sh プロセスが最下位の優先順位であることを示しています。
$ ps -ecl F S UID PID PPID CLS PRI ADDR SZ WCHAN TTY TIME COMD 19 T 0 0 0 SYS 96 f00d05a8 0 ? 0:03 sched 8 S 0 1 0 TS 50 ff0f4678 185 ff0f4848 ? 36:51 init 19 S 0 2 0 SYS 98 ff0f4018 0 f00c645c ? 0:01 pageout 19 S 0 3 0 SYS 60 ff0f5998 0 f00d0c68 ? 241:01 fsflush 8 S 0 269 1 TS 58 ff0f5338 303 ff49837e ? 0:07 sac 8 S 0 204 1 TS 43 ff2f6008 50 ff2f606e console 0:02 sh |
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
指定した優先順位でプロセスを起動します。
# priocntl -e -c class -m user-limit -p pri command-name |
コマンドを実行する
プロセスを実行する範囲のクラスを指定する。有効なクラスは TS (タイムシェアリング)、RT (リアルタイム)、IA (対話型)、FSS (公平配分)、および FX (固定優先順位)
-p オプションを使用するときに、優先順位を上下できる最大範囲を指定する
リアルタイムスレッド用に RT クラス内で相対優先順位を指定できるようにする。タイムシェアリングプロセスの場合は、-p オプションを使用すると -60 から +60 までのユーザー指定の優先順位を指定できる
プロセス状態を確認します。
# ps -ecl | grep command-name |
次の例では、ユーザーが指定できる最上位の優先順位を使用して find コマンドを開始します。
# priocntl -e -c TS -m 60 -p 60 find . -name core -print # ps -ecl | grep find |
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
実行中のタイムシェアリングプロセスのスケジューリングパラメータを変更します。
# priocntl -s -m user-limit [-p user-priority] -i idtype idlist |
ユーザー優先順位の範囲について上限を設定し、現在の優先順位を変更する
-p オプションを使用するときに、優先順位を上下できる最大範囲を指定する
優先順位を指定する
xidtype と xidlist の組み合わせを使用してプロセスを識別する。「xidtype」ではプロセス ID やユーザー ID など、ID のタイプを指定する。「xidlist」ではプロセス ID またはユーザー ID のリストを識別する
プロセス状態を確認します。
# ps -ecl | grep idlist |
次の例では、500 ミリ秒のタイムスライス、クラス RT 内の優先順位 20、グローバル優先順位 120 を指定して、コマンドを実行します。
# priocntl -e -c RT -m 500 -p 20 myprog # ps -ecl | grep myprog |
プロセスのクラスを変更する
# priocntl -s -c class -i idtype idlist |
ユーザー優先順位の範囲について上限を設定し、現在の優先順位を変更する
クラス TS (タイムシェアリング) または RT (リアルタイム) を指定して、プロセスのクラスを変更する
xidtype と xidlist の組み合わせを使用してプロセスを識別する。xidtype ではプロセス ID やユーザー ID など、ID のタイプを指定する。「xidlist」ではプロセス ID またはユーザー ID のリストを識別する
プロセスをリアルタイムプロセスに変更したり、リアルタイムプロセスから変更したりするには、ユーザーはスーパーユーザーであるか、リアルタイムシェル内で作業中でなければなりません。スーパーユーザーとしてユーザープロセスをリアルタイムクラスに変更すると、そのユーザーは priocntl -s を使用して、リアルタイムのスケジューリングパラメータを変更できません。
プロセス状態を確認します。
# ps -ecl | grep idlist |
次の例では、ユーザー 15249 が所有するすべてのプロセスをリアルタイムプロセスに変更します。
# priocntl -s -c RT -i uid 15249 # ps -ecl | grep 15249 |
nice コマンドは、Solaris の旧バージョンとの下位互換性を保つためにのみサポートされます。priocntl コマンドを使用する方がプロセスを柔軟に管理できます。
プロセスの優先順位は、そのスケジュールクラスポリシーと nice 値によって決定されます。各タイムシェアリングプロセスは、グローバル優先順位を持っています。グローバル優先順位は、ユーザーが指定した優先順位 (nice コマンドまたは priocntl コマンドの影響を受ける) とシステムで計算された優先順位を加算して算出されます。
プロセスの実行優先順位番号は、オペレーティングシステムによって割り当てられます。優先順位番号は、プロセスのスケジュールクラス、使用される CPU 時間、nice 値 (タイムシェアリングプロセスの場合) などの、複数の要素によって決定されます。
各タイムシェアリングプロセスは、親プロセスから継承したデフォルトの nice 値で起動します。nice 値は、ps レポートの NI カラムに表示されます。
ユーザーは、自分が与える nice 値優先順位を大きくしてプロセスの優先順位を下げることができます。ただし、nice 値を小さくしてプロセスの優先順位を上げることができるのは、スーパーユーザーだけです。これは、ユーザーが各自のプロセスの優先順位を大きくして CPU の独占比率を高めるのを防ぐためです。
nice 値の範囲は 0 から +39 までで、0 が最上位の優先順位です。各タイムシェアリングプロセスのデフォルトの nice 値は 20 です。このコマンドには、利用できるバージョンが 2 つあります。標準バージョンの /usr/bin/nice と、C シェルの組み込みコマンドです。
この方法により、ユーザーがプロセスの優先順位を下げることができます。ただし、スーパーユーザーはプロセスの優先順位を上げたり、下げたりすることができます。
この節では /usr/bin/nice コマンドの構文についてだけ説明し、C シェル nice 組み込みコマンドについての説明は行いません。C シェルの nice コマンドについては、csh(1) のマニュアルページを参照してください。
プロセスの優先順位をユーザーとして変更するか、スーパーユーザーとして変更するかを決定します。次のいずれかの手順に従います。
ユーザーとして、nice 値を大きくすることでコマンドの優先順位を下げます。
次の nice コマンドは、nice 値を 5 単位分大きくすることで、 command-name を実行する優先順位を下げます。
$ /usr/bin/nice -5 command-name |
上記のコマンドでは、マイナス記号は次にくるものがオプションであることを表します。このコマンドは、次のように指定することもできます。
% /usr/bin/nice -n 5 command-name |
次の nice コマンドは、nice 値をデフォルトの 10 単位分大きくすることで、 command-name の優先順位を下げます。ただし、最大値の 39 を超えさせることはできません。
% /usr/bin/nice command-name |
スーパーユーザーか同等の役割で、nice 値を変更してコマンドの優先順位を上げたり下げたりします。
次の nice コマンドは、nice 値を 10 単位分小さくすることで、command-name の優先順位を上げます。ただし、最低値の 0 未満にすることはできません。
# /usr/bin/nice --10 command-name |
上記のコマンドでは、最初のマイナス記号は次にくるものがオプションであることを表します。2 番目のマイナス記号は負の数を表します。
次の nice コマンドは、nice 値を 5 単位分大きくすることで、command-name の優先順位を下げます。ただし、最高値の 39 を超えさせることはできません。
# /usr/bin/nice -5 command-name |
詳細は、nice(1) のマニュアルページを参照してください。
同じユーザーが所有する複数の同じジョブがないかどうかを調べます。ジョブが終了するまで待たずに多数のバックグラウンドジョブを起動するスクリプトを実行した場合に、この問題が発生することがあります。
CPU 時間が大量に増えているプロセスがないかどうかを調べます。この問題を調べるには、ps 出力の TIME フィールドを確認します。そのプロセスが無限ループに入っている可能性があります。
実行中のプロセスの優先順位が高すぎないかどうかを調べます。ps -c コマンドを使用して CLS フィールドを調べると、各プロセスのスケジューラクラスが表示されます。リアルタイム (RT) プロセスとして実行中のプロセスが CPU を独占している可能性があります。また、nice 値の高いタイムシェアリング (TS) プロセスがないかどうかを調べます。スーパーユーザー特権を持つユーザーが、プロセスの優先順位を上げすぎた可能性があります。システム管理者は、nice コマンドを使用して優先順位を下げることができます。
制御がきかなくなったプロセスを調べます。このようなプロセスは、CPU 時間の使用が継続的に増加していきます。プロセスの開始時刻 (STIME) と、その後の CPU 時間 (TIME) の累積を調べると、この問題を特定できます。