プロセス・マネージャを使うと、ワークステーションで実行中のプロセスを表示したり、これらのプロセスに対してアクションを実行できます。その場合、ps(1)、truss(1)、kill(1)、その他の文字ベースのコマンドの構文に関する知識は必要ありません。プロセス・マネージャの各アクションに対し、対応する UNIX コマンドも適宜取り上げます。
UNIX 上ではプロセスが動いています。ログインシェル、アプリケーションプログラム、ユーザが実行する編集セッション、さらにはユーザのファイルを表示する ls プログラムも、すべてオペレーティングシステムが制御するプロセスです。
UNIX では、これらのプロセスに対して操作を実行できます。たとえば、実行中のすべてのプログラムをいつでも表示したり、選択したとおりにプログラムを停止して再起動したり、誤動作しているプロセスを調べてデバッグしたりできます。
誤動作しているプロセスとは、ユーザの期待するジョブを実行していないプロセスのことです。たとえば、バグのため利用可能な資源を大量に消費しているプロセス、あるいは他のプロセスの妨げになるプロセスなどです。このような事態が発生したときは、プロセス・マネージャを使って、誤動作しているプロセスを検出してください。
ワークステーションのパフォーマンスまたは応答が悪くなったように思われる
プログラムがユーザの入力に応答しない
印刷、ファイル転送、リモートログインなどの標準サービスに応答がない
すべてのプロセスを表示する場合、プロセス・マネージャは通常 30 から 50 個のプロセスを表示します。以下の注意事項が役立つでしょう。不明な場合は、システム管理者に問い合わせてください。
パフォーマンスメータを使って、CPU 使用率、ディスク使用率などのパフォーマンスパラメータが異常に高くないか確認します。高い場合は、プロセス・マネージャを使って、誤動作しているプロセスを特定できます。
プロセス・マネージャを使って、以下の事項を特定します。
利用可能な CPU または RAM を大量に使ってはいけないときに使っているプロセス
親プロセスが 1、つまり init に戻った親のないプロセス (ただし、sched、dtlogin、cron など、親プロセス ID が 1 でなければならないプロセスは該当しません。)
終了しているはずが、終了していないプロセス
パフォーマンス低下の原因になっている他のユーザ所有の大規模なプロセス
プロセス・マネージャを使うと、ワークステーションで実行中のプロセスを表示したり、これらのプロセスにアクセスしたりできます。
リスト内の各プロセスエントリは、次の表に記載するような有用な情報を提供します。
カラム見出し | 表示内容 |
---|---|
PID | プロセス ID |
名前 | プロセス名 |
所有者 | プロセスの所有者名 (ユーザ名) |
CPU% | 最近 CPU を使用した時間と同じ期間内に使用可能な時間の比率をパーセントで表示 |
SZ | 現在このプロセスが占有する RAM の量 |
VSZ | 仮想記憶域の合計サイズ |
起動時刻 | プロセスの起動時刻 (または日付) |
PPID | 親プロセスのプロセス ID、つまり PPID |
コマンド | 実行されている実際の UNIX コマンド (表示しきれない部分は切り捨て) |
以下のアクションを実行しても、選択したワークステーション上で動いているプロセスには影響しません。
すべてのプロセスまたは指定の文字列を含むプロセスのみ表示する
指定の文字列を含むプロセスを検索する
カラムに従ってソートしたプロセスをスクロール区画に表示する
プロセスの状態の取得間隔を変更し、プロセスの状態の情報をコピーして保存する
フロントパネルの [ツール] サブパネルにある [プロセスを検索] コントロールをクリックします。
プロセス・マネージャのメイン・ウィンドウが表示されます。プロセス・マネージャは、ワークステーション上で現在動いているすべてのプロセスの状態を表示します。
[プロセス・マネージャ] ウィンドウの [フィルタ] フィールドにフィルタテキストを入力します。
フィルタテキストは、表示しようとする特定のプロセスのサブセットつまりグループのプロセスエントリに共通する文字列を指定します。たとえば、図 17-1 では、[オーディオツール] に関連するすべてのプロセスを表示するために、audio と入力しています。
[Return] キーを押します。
スクロール区画のプロセスが変更され、フィルタテキストと正確に一致する部分を含んだプロセスエントリのみが取り込まれます。
すべてのプロセスの表示に戻るには、[フィルタ] フィールドを消去してから [Return] キーを押します。
検索するテキストを [検索] ドロップダウンボックスに入力するか、[検索] ドロップダウンリストから前に使った検索テキストを選択します。
検索するテキストは、表示しようとするプロセスすべてのプロセスエントリに共通する文字列にします。
[Return] キーを押すと、最初に見つけた検索テキストが強調表示されます。
プロセスエントリのすべてのフィールドが検索対象となります。
[Return] キーを押して、次に見つけた検索テキストを強調表示します。以下、同様の操作を行います。
必要なプロセスエントリが見つかったら、[検索] フィールドを消去します。
スクロール区画の最後まできても、リストの一番上に戻って検索はされません。検索は下方向のみなので、カーソルを一番上のエントリにあわせてから検索してください。
デフォルトでは、プロセス・マネージャは、プロセスエントリを CPU 使用率の高いものから順番に表示します。これは、CPU 使用率カラムのカラム見出し (CPU%) が選択されていて、他のカラム見出しのボタンは選択されていないことを見ればわかります。
プロセスエントリのリストからソートするカラムを選択するには、対応するカラム見出しをクリックするか、[表示] メニューからカラム名を選択します。
プロセスエントリのリストがソートされ、新しい順序で表示されます。各カラムのデフォルト順序を表 17-1 に示します。
表 17-1 プロセスエントリのデフォルトのディスプレイ順序選択したカラム | ソート方法 |
---|---|
PID | プロセス ID を基準にして数字の小さいものから順にソートする |
名前 | プロセス名を基準にしてアルファベット順にソートする |
所有者 | 所有者名を基準にしてアルファベット順にソートする |
CPU% | CPU 使用率を基準にして数値の大きいものから順にソートする |
SZ | RAM 使用率を基準にして数値の大きいものから順にソートする |
VSZ | スワップ空間の使用率を基準にして数値の大きいものから順にソートする |
起動時刻 | プロセスの起動時刻を基準にして新しいものから順にソートする |
PPID | 親プロセスのプロセス ID 番号を基準にして数字の大きいものから順にソートする |
コマンド | フルパス名を基準にして英数字の大きいものから順にソートする (/ などの文字はソートに関しては英字に比べて数が小さい) |
(省略可能) 以上のカラムのいずれか 1 つのソート順を逆にするには (たとえば、RAM 使用率を基準にして数値の小さいものから順にソートする)、カラム見出しの [SZ] ボタンを再度クリックします。
カラム見出し領域が強調表示されて、逆順でソートした結果が表示されます。
デフォルトでは、プロセス・マネージャは、30 秒ごとにワークステーション上のプロセスの状態を取得して結果を表示します。
プロセスの状態を連続して取得する場合は、[プロセスの状態の取得] メニューから [開始]、連続して取得しない場合は [停止] を選択します。
プロセスの状態を連続して取得している場合は、[プロセスの状態の取得] メニューに [停止] というメニュー項目が表示されます。連続して取得していない場合は、[開始] になります。
プロセスの状態の取得間隔を変更するには、[プロセスの状態の取得間隔] ボックスに秒数 (最大 604800 秒、つまり 14 日) を入力します。
[Return] キーを押して、新しいプロセスの状態の取得間隔を有効にします。
直ちにプロセスの状態の取得を行うには、[プロセスの状態の取得] メニューから [現在の状態を取得] を選択します。
プロセス・マネージャはプロセスの状態の取得を行い、ディスプレイが変更されます。
ディスプレイのプロセスエントリを 1 つまたは複数選択してコピーし、そのテキストを他のアプリケーションにペーストできます。
また、プロセスの状態をファイルに保存するときに使用できるオプションは、次のとおりです。
現在のプロセスの状態のみ格納する新しいファイルを作成する
新しいプロセスの状態がそれぞれ追加されるログファイルを設定する
[プロセスの状態の取得] メニューから [別名保存] を選択します。
[別名保存] ダイアログボックスが表示されます。
新しいファイル名と格納場所を指定し、[了解] をクリックします。
現在表示されているプロセスエントリを格納したテキストファイルが作成されます。
[プロセスの状態の取得] メニューから [ログファイル] を選択します。
[ログファイル] ダイアログボックスが表示されます。
新しいファイル名と保存するフォルダ名を指定し、[了解] をクリックします。
テキストファイルが作成され、新しいプロセスの状態が (ヘッダー情報とともに) このファイルに追加されます。
プロセス・マネージャを終了するか、[プロセスの状態の取得] メニューから [ログ作成を停止] を選択しないかぎり、引き続きこのファイルに追加されます。
リスト内のプロセスエントリを特定して選択すると、このプロセスに対して次のアクションを実行できます。
終了のシグナルを送ってプロセスを終了するか、応答を呼び出す
アドレス・マネージャで所有者情報を検索する
システムコールを監視したり、子プロセスを表示したり、またはデバッガを実行したりする
スタックまたはプロセスの系統図を表示する
次の手順のうち意味が分からないものについては、システム管理者に問い合わせてください。
UNIX の kill コマンドを使うと、プロセスにシグナルを送ることができます。「シグナル」とは、プロセスを中断して応答を行わせるためにプロセスに送られるメッセージです。送られるタイプの信号にプロセスが応答するようになっていれば、プロセスは応答します。応答するようになっていなければ、プロセスは終了します。signal(5) のマニュアルページに記載されているように、シグナルは 42 種類あります。次の表に、よく使われるシグナルの番号、名前、および意味をまとめます。
シグナル番号 | シグナル名 | 意味 |
---|---|---|
1 | HUP | ハングアップ (ログアウト前に使われる場合が多い) |
2 | INT | 割り込み (端末セッションで [Control]+[C] キーを押した場合と同じ) |
9 | KILL |
終了 (クリーンアップなしに終了する) プロセスの所有者またはスーパーユーザ (root) が出した場合にのみ機能する。 プログラムはこのシグナルに応答できず、終了しなければならない |
15 | TERM |
終了 (クリーンアップ後に正常終了する) プロセスの所有者またはスーパーユーザ (root) が出した場合にのみ機能する |
[強制終了] メニュー項目を使うと、プロセスに KILL シグナルを送ってクイック終了できます。[シグナルを送信] メニュー項目を使うと、kill(1) コマンドで送られるシグナルをさらに制御できます。たとえば、INT シグナルまたは HUP シグナルを送信できます。
プロセスにシグナルを送るだけにしてください。ただし、ユーザがその意味を理解していることが条件です。たとえば、ログインシェルを選択して KILL シグナルを送ると、突然ログアウトします。プロセスならびにジョブ制御の詳細は、システム管理者に問い合わせるか、次の内容を参照してください。
signal(5)、ps(1)、signal(3C) の各マニュアルページ
プロセス・マネージャのスクロール区画でプロセスエントリを選択します。
[プロセス] メニューから [強制終了] を選択します。
プロセス (およびその子プロセス) が終了します。ただし、ユーザにアクセス権が必要です。アクセス権がない場合は、エラーが表示されます。プロセスの終了に数秒かかる場合もあります。次にプロセス・マネージャでプロセスの表示画面が変更される際にそのプロセスが表示されていなければ、プロセスは終了しています。
対応する UNIX コマンドは kill -9 PID です。PID は、選択したプロセスのプロセス ID です。
次のファイルの「Kill」というラベルのついたアクションを再定義すると、[強制終了] メニュー項目で実行されるコマンドを別のコマンドに再定義できます。
/usr/dt/appconfig/types/
localename/sdtprocess.dt
プロセス・マネージャのスクロール区画でプロセスエントリを選択します。
[プロセス] メニューから [シグナルを送信] を選択します。
ダイアログボックスが表示され、シグナルの指定を求められます。signal(5) のマニュアルページに記載する 42 種類のシグナルから、少なくとも 1 つを指定します。
対応するシグナル番号または名前を入力し、[了解] をクリックします。
シグナルコマンドが表示され、ダイアログボックスが閉じます。成功を知らせるメッセージは表示されません。通常、プロセスを終了すると、その子プロセスも終了します。
対応する UNIX コマンドは kill -signum_name PID です。-signum_name はシグナルの番号または名前、PID は選択したプロセスのプロセス ID です。
プロセス・マネージャのスクロール区画でプロセスエントリを選択します。
[プロセス] メニューから [所有者情報を表示] を選択します。
アドレス・マネージャが表示され、選択したプロセスのシステムユーザ名がシステムカードで自動的に検索されます。アドレス・マネージャの詳細は、第 16 章「アドレス・マネージャの使い方」を参照してください。
プロセス・マネージャのスクロール区画でプロセスエントリを選択します。
[プロセス] メニューから [プロセスの系統図を表示] を選択します。
指定したプロセスのプロセスツリーを含んだウィンドウが表示されます。子プロセスは、それぞれの親プロセスに対してインデントされて表示されます。
対応する UNIX コマンドは /usr/proc/bin/ptree PID です。PID は、選択したプロセスのプロセス ID です。
UNIX プロセスが 1 つまたは複数の依存プロセスを起動するとき、このプロセスを「子プロセス」または子供といいます。子プロセスと親プロセスのユーザ ID は同じです。
プロセス・マネージャのスクロール区画でプロセスエントリを選択します。
[プロセス] メニューから [子プロセスを追跡] を選択します。
選択したプロセスのすべての子プロセス (およびその子プロセス、再帰的に作成されます) の作成記録が表示されます。
Intro(2) のマニュアルページに記載するエラーコード名を使って、エラーリターンがレポートされます。
対応する UNIX コマンドは、truss -fa -texec,fork -s|CLD,ALRM -p PID です。PID は、選択したプロセスのプロセス ID です。
プロセスは、実行中に UNIX カーネルの呼び出し、つまりシステムコールを行います。これらのシステムコールを追跡して、他のプロセスに与えている影響を確認できます。
プロセス・マネージャのスクロール区画でプロセスエントリを選択します。
[プロセス] メニューから [システムコールを追跡] を選択します。
ダイアログボックスが表示され、任意の引き数の入力を求められます。
[了解] をクリックします。
トレース出力の各行は、フォルトの発生またはシグナル名、引き数と戻り値を含めたシステムコール名のいずれかをレポートします。詳細は、truss(1) のマニュアルページを参照してください。
対応する UNIX コマンドは、truss -p PID です。PID は選択したプロセスのプロセス ID です。
プロセス・マネージャのスクロール区画でプロセスエントリを選択します。
[プロセス] メニューから [スタックを表示] を選択します。
選択したプロセスに対して 16 進数と記号からなるスタックトレースが表示されます。
対応する UNIX コマンドは、/usr/proc/bin/pstack PID です。PID は選択したプロセスのプロセス ID です。
アプリケーション開発者とシステム管理者は、Sun WorkshopTM などのデバッグ用アプリケーションを使い、誤動作しているプロセスを詳しく調べることがあります。[プロセス] メニューの [デバッグ] 項目を使うと、選択したプロセスに対してユーザの指定するデバッガが呼び出されます。
指定のデバッガを使って、プロセスをデバッグします。
対応する UNIX コマンドは、workshop -d command です。workshop はデバッグプログラム名、command はプロセス ID をデバッガに引き渡すために必要なコマンドです。