parlib: add a helper to run a process and wait
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Mar 2020 19:58:18 +0000 (14:58 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 1 Apr 2020 22:27:54 +0000 (18:27 -0400)
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/parlib/include/parlib/parlib.h
user/parlib/parlib.c

index d7c0727..aecdb28 100644 (file)
@@ -74,6 +74,7 @@ pid_t create_child(const char *exe, int argc, char *const argv[],
 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,
index 33bead9..01b137d 100644 (file)
@@ -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 @@ pid_t create_child_with_stdfds(const char *exe, int argc, char *const argv[],
        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)
 {