parlib: add a helper to run a process and wait Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/user/parlib/include/parlib/parlib.h b/user/parlib/include/parlib/parlib.h index d7c0727..aecdb28 100644 --- a/user/parlib/include/parlib/parlib.h +++ b/user/parlib/include/parlib/parlib.h
@@ -74,6 +74,7 @@ pid_t create_child_with_stdfds(const char *exe, int argc, char *const argv[], char *const envp[]); int provision_core_set(pid_t pid, const struct core_set *cores); +int run_and_wait(const char *exe, int argc, char *const argv[]); /* Debugging */ void set_notify_9(void (*handler)(struct event_msg *ev_msg,
diff --git a/user/parlib/parlib.c b/user/parlib/parlib.c index 33bead9..01b137d 100644 --- a/user/parlib/parlib.c +++ b/user/parlib/parlib.c
@@ -7,6 +7,7 @@ #include <parlib/ros_debug.h> #include <parlib/event.h> #include <stdlib.h> +#include <sys/wait.h> /* Control variables */ bool parlib_wants_to_be_mcp = TRUE; @@ -93,6 +94,23 @@ return kid; } +/* Helper for kicking off a process, but with little specific error handling */ +int run_and_wait(const char *exe, int argc, char *const argv[]) +{ + extern char **environ; + + pid_t kid; + + kid = create_child_with_stdfds(exe, argc, argv, environ); + if (kid < 0) + return -1; + if (sys_proc_run(kid) < 0) + return -1; + if (waitpid(kid, NULL, 0) != kid) + return -1; + return 0; +} + /* Provisions the CG cores to PID. Returns -1 if any of them fail. */ int provision_core_set(pid_t pid, const struct core_set *cores) {