Executable objects are like files. They respond to the "fsobj_stat" method. You generally can't open them with the "file_open" method -- this will give "Permission denied". They support two methods besides the usual file methods.
// Test whether this is an executable object. // Executables that are just files will not respond to this. "Exep" => "Okay" "Exeo" ref/int data => "Okay" return_code/int The data is an array of pairs: * ("Argv", x): x is an array of strings representing argv * ("Env.", x): x is an array of strings representing the environment (usually each string is of the form "X=y") * ("Fds.", x): x is an array of (i, FD) * ("Root", obj): obj is the root directory * ("Cwd.", string): pathname of current working directory (this can be omitted, in which case process will have no defined cwd) * ("Pgid", int): process group ID to set for the new process (this is optional, but reading from the console won't work without setting it, and neither will Ctrl-C or Ctrl-Z) The invocation returns when the process started has exited. It returns the exit code that `wait' returns for the process.