InfoScale™ 9.0 Cluster Server Agent Developer's Guide - AIX, Linux, Solaris, Windows
- Introduction
- Agent entry point overview
- About agent entry points
- Agent entry points described
- About the action entry point
- About the info entry point
- Considerations for using C++ or script entry points
- About the agent information file
- About the ArgList and ArgListValues attributes
- Creating entry points in C++
- About creating entry points in C++
- Syntax for C++ entry points
- Agent framework primitives
- Agent Framework primitives for container support
- Creating entry points in scripts
- About creating entry points in scripts
- Syntax for script entry points
- Agent framework primitives
- VCSAG_GET_ATTR_VALUE
- Agent Framework primitives with container support
- Example script entry points
- Logging agent messages
- Building a custom agent
- Building a script based IMF-aware custom agent
- Creating XML file required for AMF plugins to do resource registration for online and offline state monitoring
- Testing agents
- Static type attributes
- About static attributes
- Static type attribute definitions
- AdvDbg
- ArgList
- State transition diagram
- Internationalized messages
- Troubleshooting VCS resource's unexpected behavior using First Failure Data Capture (FFDC)
- Appendix A. Using pre-5.0 VCS agents
VCSAgExec
int VCSAgExec(const char *path, char *const argv[], char *buf, long buf_size, unsigned long *exit_codep)
Fork a new process, exec a program, wait for it to complete, and return the status. Also, capture the messages from stdout and stderr to buf. Caller must ensure that buf is of size >= buf_size.
VCSAgExec is a forced cancellation point. Even if the C++ entry point that calls VCSAgExec disables cancellation before invoking this API, the thread can get canceled inside VCSAgExec. Therefore, the entry point must make sure that it pushes appropriate cancellation cleanup handlers before calling VCSAgExec. The forced cancellation ensures that a service thread running a timed-out entry point does not keep running or waiting for the child process created by this API to exit, but instead honors a cancellation request when it receives one.
Explanation of arguments to the function:
path | Name of the program to be executed. |
argv | Arguments to the program. argv[0] must be same as path. The last entry of argv must be NULL. (Same as execv syntax) |
buf | Buffer to hold the messages from stdout or stderr. Caller must supply it. This function will not allocate. When this function returns, buf will be NULL-terminated. |
bufsize | Size of buf. If the total size of the messages to stdout/stderr is more than bufsize, only the first (buf_size - 1) characters will be returned. |
exit_codep | Pointer to a location where the exit code of the executed program will be stored. This value should interpreted as described by wait() on Unix |
Return value: VCSAgSuccess if the execution was successful.
Example:
// // ... // 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]); } // // ... //