ワークユニットの運用支援機能として、以下の機能を使用することができます。
ワークユニット出口プログラム機能
プロセス回収出口プログラム機能
ここでは、各出口機能の説明と、その効果および注意事項について説明を行います。
ワークユニット出口プログラム機能およびプロセス回収出口プログラム機能を使用する場合は、運用中にワークユニット定義で指定したカレントディレクトリのディスク領域で、領域不足が発生しないよう十分注意してください。
領域不足が発生すると、ワークユニット出口プログラムおよびプロセス回収出口プログラムの実行に失敗する場合があります。
ワークユニット単位に出口プログラムを設定することが可能です。ワークユニット起動/停止/異常終了などの事象ごとにワークユニット定義に指定したワークユニット出口プログラムを呼び出します。
ワークユニット起動時に共用メモリなどの資源を獲得し、ワークユニット停止または異常終了した場合に資源を解放するような場合に有効です。
また、ワークユニット起動時に呼び出されるワークユニット出口プログラムはユーザ情報を返却することができ、この情報はプロセス情報通知より参照が可能です。
たとえばワークユニット起動時にワークユニット出口プログラムにより共用メモリを獲得し、その獲得した共用メモリ識別子をワークユニット出口プログラムのユーザ情報として復帰することで、アプリケーションプロセスでワークユニット起動時に獲得した共用メモリ識別子を受け渡すことが可能となります。
ワークユニット出口プログラム機能は、最大処理時間監視を行うことができます。最大処理時間を超過した場合、出口プログラムを呼び出すプロセスは強制停止され、メッセージが出力されます。ワークユニットの起動時には、ワークユニット起動が失敗します。その他の契機で呼び出された場合は、動作異常とはなりません。
ワークユニット出口プログラムがループなどにより復帰しない場合、ワークユニットの起動/停止が終了しません。そのため、必ず最大処理時間監視を行うようにしてください。
ワークユニット出口プログラムは以下のディレクトリ上で動作します。
プラットフォーム | システム | 指定形式 (注1) |
---|---|---|
Windows(R) | - | xxx\yyy\zzz |
Solaris | デフォルトシステム | xxx/yyy/zzz |
拡張システム (注2) | xxx/yyy.システム名/zzz |
注1)
xxx:ワークユニット定義で指定されたディレクトリ
yyy:当該ワークユニット名
zzz:ワークユニット出口プログラムの実行プロセスID
注2)
拡張システムはSolarisのみ使用可能です。
また、上記ディレクトリ上に標準出力ファイルおよび標準エラー出力ファイルが出力されます。
ワークユニット出口プログラム機能の詳細については、“H.1 ワークユニット出口プログラム機能”を参照してください。
ワークユニット出口プログラム機能は、出口プログラムがワークユニット起動時に一度呼び出され、ワークユニット停止時に一度呼び出されます。ワークユニット起動時/停止時にアプリケーションプロセスごとに呼び出される前/後出口機能とは異なる機能であるため、注意が必要です。
ワークユニット出口プログラム機能とプロセス回収出口プログラム機能を併用する場合は、実行モジュールは同一とする必要があります。
Microsoft(R) Visual C++ .NET または、Microsoft(R) Visual C++ 2005を使用して、出口プログラムを作成する場合の注意点
アプリケーションより標準出力または標準エラー出力に向けて出力されたデータは、カレントフォルダ配下のstdoutファイルまたはstderrファイルに出力されます。
しかし、Microsoft(R) Visual C++ .NETまたは、Microsoft(R) Visual C++ 2005を使用してビルドされたアプリケーションでは、標準出力または標準エラー出力に向けて出力されたデータが、カレントフォルダ配下のstdoutファイルまたはstderrファイルに出力されません。
これを回避し正しく出力するためには、アプリケーションにおいて以下の対処を実施してください。
プログラムの先頭に以下のコードを追加してください。(注1)
freopen("stdout", "w", stdout); freopen("stderr", "w", stderr);
注1) Microsoft(R) Visual C++ 2005を使用してビルドした場合、“warning C4996: 'freopen' が古い形式として宣言されました。”という警告が出力される場合がありますが、動作上の問題はありません。
アプリケーションが停止(異常終了も含む)した場合、ワークユニット定義で設定したプロセス回収出口プログラムを呼び出すことが可能です。プロセスが停止した場合、共有メモリなどに設定されたプロセスに関する資源、情報を削除したい場合に有効です。
プロセス回収出口プログラムはアプリケーションプロセス以外のプロセスから呼び出されますので、アプリケーションプロセス上でのみ参照可能な情報は参照できません。そのため、プロセス回収出口プログラムを作成する場合、考慮する必要があります。
当プロセス回収出口プログラムは停止コマンドによる停止または異常終了など、プロセスが停止した場合に呼び出されます。
ただし、ユーティリティワークユニットの場合、停止コマンドにより停止された場合、およびワークユニット異常終了時に停止されたプロセスに関しては呼び出させません。
プロセス回収出口プログラム機能には、最大処理時間監視を行うことができます。最大処理時間を超過した場合、出口プログラムを呼び出すプロセスは強制停止され、メッセージが出力されます。動作異常とはなりません。
プロセス回収出口プログラムがループなどにより復帰しない場合、次のワークユニットの操作が待ち状態となります。そのため、必ず最大処理時間監視を行うようにしてください。
プロセス回収出口プログラムは以下のディレクトリ上で動作します。
プラットフォーム | システム | 指定形式 (注1) |
---|---|---|
Windows(R) | - | xxx\yyy\zzz |
Solaris | デフォルトシステム | xxx/yyy/zzz |
拡張システム (注2) | xxx/yyy.システム名/zzz |
注1)
xxx:ワークユニット定義で指定されたディレクトリ
yyy:当該ワークユニット名
zzz:プロセス回収出口プログラムの実行プロセスID
注2)
拡張システムはSolarisのみ使用可能です。
また、上記ディレクトリ上に標準出力ファイルおよび標準エラー出力ファイルが出力されます。
プロセス回収出口プログラムの詳細については、“H.2 プロセス回収出口プログラム機能”を参照してください。
Microsoft(R) Visual C++ .NETまたは、Microsoft(R) Visual C++ 2005を使用して、出口プログラムを作成する場合の注意点
アプリケーションより標準出力または標準エラー出力に向けて出力されたデータは、カレントフォルダ配下のstdoutファイルまたはstderrファイルに出力されます。
しかし、Microsoft(R) Visual C++ .NETまたは、Microsoft(R) Visual C++ 2005を使用してビルドされたアプリケーションでは、標準出力または標準エラー出力に向けて出力されたデータが、カレントフォルダ配下のstdoutファイルまたはstderrファイルに出力されません。
これを回避し正しく出力するためには、アプリケーションにおいて以下の対処を実施してください。
プログラムの先頭に以下のコードを追加してください。(注1)
freopen("stdout", "w", stdout); freopen("stderr", "w", stderr);
注1) Microsoft(R) Visual C++ 2005を使用してビルドした場合、“warning C4996: 'freopen' が古い形式として宣言されました。”という警告が出力される場合がありますが、動作上の問題はありません。