SYNOPSIS
#include <agar/core.h>
DESCRIPTION
The
AG_Execute() function provides a cross-platform interface for running executable programs
and monitoring their execution.
INTERFACE
AG_ProcessID AG_Execute (const char *file, char **argv)
AG_ProcessID AG_WaitOnProcess (AG_ProcessID pid, enum ag_exec_wait_type wait_type)
int AG_Kill (AG_ProcessID pid)
AG_Execute() runs the specified program with the given arguments, returning an integer process ID. If an error has occurred, the function returns -1 with an error message.
AG_WaitOnProcess() checks for status or waits until the specified process terminates. The wait_type argument may be one of:
| AG_EXEC_WAIT_IMMEDIATE | If the process has not exited, return immediately without blocking. |
| AG_EXEC_WAIT_INFINITE | Block the calling thread until the process has exited. |
The function returns the PID of the terminated process, -1 if an error has occurred, or 0 if wait_type is AG_EXEC_WAIT_IMMEDIATE and the process is still running.
The AG_Kill() function immediately terminates the specified process.
EXAMPLES
The following code runs a program on a Unix-like system:
The following code launches a background task on Windows and terminates its execution after 10 seconds:
char *argv[3];
AG_ProcessID pid;
argv[0] = "ls";
argv[1] = "-l"
argv[2] = (char *)NULL;
pid = AG_Execute("/bin/ls", argv);
if (pid == -1)
AG_Verbose("Execute failed (%s)\n", AG_GetError());
The following code launches a background task on Windows and terminates its execution after 10 seconds:
char *argv[2];
AG_ProcessID pid;
int counter = 0;
argv[0] = "MyTask";
argv[1] = (char *)NULL;
pid = AG_Execute("C:\Program Files\"
"Example\MyTask.exe");
for (;;) {
if (AG_WaitOnProcess(pid, AG_EXEC_WAIT_IMMEDIATE)
== -1) {
AG_Verbose("Task exited unexpectedly (%s)\n",
AG_GetError());
break;
}
if (counter++ == 10) {
if (AG_Kill(pid) == -1) {
AG_Verbose("Kill failed (%s)\n",
AG_GetError());
}
break;
}
sleep(1);
}
SEE ALSO
HISTORY
The
AG_Execute interface first appeared in
Agar 1.4.1.