Mロックユーティリティ(LKE)は、GT.Mのロック環境を検査し変更するために使用されるツールです。M LOCKの説明については、Mの一般的な言語機能のLOCKセクションと、 GT.Mプログラマーズガイド のコマンドの章のLOCKコマンドの説明を参照してください。
Mロックユーティリティ(LKE)の2つの主要な機能は:
すべてを表示し、または、現在アクティブなロックを特定する。
CLEAR
は、 すべてをクリアしたり、あるいは、現在アクティブな特定のロックをクリアします。
Mアプリケーションのデバッグ時に、デッドロックが起こりうる状況を識別するためにLKEを使用するでしょう、つまり、2つ以上のプロセスがロックをもっていて、そして、他のプロセスによってロックされたリソースの名前を追加するために待っています。
Process 1 Process 2 LOCK A LOCK B LOCK +A LOCK +B
プロセス1はロックされたAをもっていて、ロックBへアクセスを試みます。プロセス2はロックされたBを持ち、ロックAへクセスを試みます。なぜなら、追加が可能なロックを追加する前に、これらのプロセスは、それらの現在のロックを解放しないので、それらが問題を検出するためにタイムアウトを提供することすらもしないしために、それらはデッドロックされます。したがって、どちらのプロセスも正常に進むことはできません。両方のプロセスから実行されるかもしれないそのロックの1つを解放するために、LKE を使用することができます。しかしながら、ロックを解放することは、そのデザインされた前提条件に違反するプロセスの原因となるので、1つのプロセスを終了させることは、デッドロックを打開する一般的に安全な方法です。
注意 | |
---|---|
Mプロセスが残っていると、GT.Mは通常、保持されているそのプロセスを LOCKs or ZALLOCATEs でリリースします。GT.Mプロセスがアクティブな間に、もしGT.Mプロセスが異常終了したなら、あるいは、もしシステムが"クラッシュ" したならば、GT.Mは通常のクリーンアップを実行することはできません。ただし、他のプロセスが存在しなくなったプロセスが所有するLOCKを数秒待つと、GT.Mは自動的に「孤立した」LOCKをクリアします。 |
GT.Mのインストール手順は、環境変数 gtm_dist で指定されたディレクトリにLKEユーティリティパッケージを置きます。
LKEでは、環境変数 gtmgbldir が定義されている必要があります。
シェルプロンプトで、次のようなコマンドを使用してLKEを呼び出します。もしこれが動作しない場合は、セットアップを調査しファイルアクセスに関する問題について、システム管理者にコンサルトをしてください。
$gtm_dist/lke LKE>
重要 | |
---|---|
常に、ロックが保持されているその場所のノードで LKE を実行してください。 |
LKEがコマンドを受け入れる準備ができているなら、LKE> プロンプトが表示されます。LKEから出るには、LKE> プロンプトでEXITコマンドを入力してください。
追加の情報がLKEコマンドの後にコマンドラインから入力される時に、LKEはそのコマンドとして追加情報を処理します。
$gtm_dist/lke show -all
このコマンドは、すべての現ロックを表示し、シェルプロンプトに戻ります。
もしLKEの引数に引用符が含まれている場合は、バックスラッシュ ( \ ) によって引数の中でそれぞれの引用符の前に置くか、または、引用符の一組(シングルまたはダブルで揃っている)で引数全体を囲みます。シェルから実行するこれらLKEコマンドに対してのみ、この規則を適用します。
$gtm_dist/lke show -lock="^Account(\"Name\")" $gtm_dist/lke show -lock='^Account("Name")'
どちらのコマンドも、LOCK ^Account("Name") のステータスをデフォルト領域に表示します。