bproc_rexec -- exec a program on a remote node
#include <sys/bproc.h> int _bproc_rexec_io (int node, int port, const char * cmd, char * const argv, char * const envp); int bproc_rexec (int node, const char * cmd, char * const argv, char * const envp);
- The node the child should be on.
- The port to
BProcshould connect back to for I/O forwarding.
- The program to execute
- The argument list
- The environment
This call has semantics similar to
execve. It replaces the current
process with a new one. The new process is created on
node and the
local process becomes the ghost representing it. All arguments are
interpreted on the remote machine. The binary and all libraries it needs
must be present on the remote machine. Currently, if remote process
creation is successful but exec fails, the process will just exit with
status 1. If remote process creation fails, the function will return -1
errno is set appropriately.
port is the TCP port
BProc should connect back to to handle I/O
port value of 0 means it assumes I/O forwarding is
being done on the existing socket for
Any other value and it will try to connect back to that port and open
three connections, one for
stdout, one for
stderr, and one for
If you use
port has a default value of 0.
Does not return on success.
Returns -1 on error, and sets
- The filesystem where
cmdresides is mounted nosuid and the program is suid or sgid
- Out of memory
- No Master
argvpoints to memory that is not accessible by the program.
- The program does not have execute permission on
- Argument list is too big
cmdis not in a recognized executable format or is for the wrong architecture
cmdis too long
cmddoes not exist.
- Part of the path to
cmdis not a directory.
- Too many symbolic links were encountered when resolving
cmdis open for writing by another program.
- An I/O error occurred.
- The limit on open files has been reached.
- An ELF executable had more than one