Cluster Server 7.3.1 エージェント開発者ガイド - AIX、Linux、Solaris、Windows
- 概要
- エージェントのエントリポイントの概要
- エージェントのエントリポイントについて
- エージェントエントリポイントの説明
- action エントリポイントについて
- info エントリポイントについて
- C++ またはスクリプトエントリポイントの使用上の注意事項
- エージェント情報ファイルについて
- ArgList 属性と ArgListValues 属性について
- C++ でのエントリポイントの作成
- C++ でのエントリポイントの作成について
- C++ のエントリポイントの構文
- エージェントフレームワークの基本関数
- コンテナサポートのためのエージェントフレームワーク基本関数
- スクリプトでのエントリポイントの作成
- スクリプトでのエントリポイントの作成について
- スクリプトエントリポイントの構文
- エージェントフレームワークの基本関数
- VCSAG_GET_ATTR_VALUE
- コンテナをサポートするエージェントフレームワーク基本関数
- スクリプトのエントリポイントの例
- エージェントメッセージのログ
- カスタムエージェントの作成
- スクリプトベースの IMF 対応カスタムエージェントの作成
- エージェントのテスト
- 静的タイプ属性
- 静的属性について
- 静的タイプ属性の定義
- AdvDbg
- ArgList
- 状態の遷移図
- 国際化されたメッセージ
- First Failure Data Capture(FFDC)を使用した VCS リソースの予期しない動作のトラブルシューティング
- 付録 A. 5.0 より前の VCS エージェントの使用
VCSAgExec
int VCSAgExec(const char *path, char *const argv[], char *buf, long buf_size, unsigned long *exit_codep)
新しいプロセスに分岐し、プログラムを実行した後で、プログラムが完了するまで待ち、状態を戻します。また、stdout と stderr からメッセージを取り込み、buf に保持します。 呼び出し側では、buf のサイズを buf_size 以上確保するようにします。
VCSAgExec は強制取り消しポイントです。 VCSAgExec を呼び出す C++ エントリポイントが、この API を呼び出す前に取り消しを無効にしても、スレッドは VCSAgExec 内で取り消される場合があります。 したがって、エントリポイントでは、適切な取り消しクリーンアップハンドラをプッシュしたことを確認してから、VCSAgExec を呼び出す必要があります。 強制取り消しでは、タイムアウトのエントリポイントを実行しているサービススレッドは、この API で作成した子プロセスが終了するまで実行を続けたり待機することはなく、取り消し要求を受け取ったときに取り消しを実行します。
関数の引数の説明
path | 実行するプログラム名。 |
argv | プログラムへの引数。argv(0)は path と同じにする必要があります。 argv の最終エントリは NULL にする必要があります (execv syntax と同じ)。 |
buf | stdout または stderr からのメッセージを保持するバッファ。呼び出し側で準備する必要があります。この関数は割り当てを行いません。この関数が戻ると、buf は NULL 終端になります。 |
bufsize | buf のサイズ。 stdout または stderr へのメッセージの合計サイズが bufsize を超える場合、初めから(buf_size - 1)文字分だけが戻されます。 |
exit_codep | 実行したプログラムの終了コードの格納場所を指すポインタ。この値は、 UNIX では wait() によって記述されたものと解釈する必要があります。 |
戻り値: 実行が正常に終了した場合は VCSAgSuccess が戻ります。
例:
// // ... // char **args = new char* [3]; char buf[100]; unsigned int status; args[0] = "/usr/bin/ls"; args[1] = "/tmp"; args[2] = NULL; int result = VCSAgExec(args[0], args, buf, 100, &status); if (result == VCSAgSuccess) { // Unix: if (WIFEXITED(status)) { printf("Child process returned %d\n", WEXITSTATUS(status)); } else { printf("Child process terminated abnormally(%x)\n", status); } } else { printf("Error executing %s\n", args[0]); } // // ... //