For the more Posix-like behavior of running each program in a separate process (and thus taking advantage of thread safety, encapsulation, and protection that the new process may give you), use the spawn() API to start the program.
You can also use the capability provided in spawn() to allow the child process to start multiple threads. See the spawn() API documentation for a description of the SPAWN_SETTHREAD_NP flag in the inheritance structure.
A CL command for using SPAWN is also available from the QUSRTOOL library. See "SPAWN CL command, QUSRTOOL example" on page 52 for more information about the SPAWN CL command.