aos: Optionally give subprocesses more than 1 second to quit

Right now our application manager is hard-coded to send SIGKILL to its
child if it hasn't shut down within 1 second. This is suboptimal
because some applications simply take longer than 1 second to shut
down.

The goal here is to eventually add a "stop duration" field in the AOS
config.

Change-Id: I885f39d4503519bb75598a1b7e595b56e3f21348
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/starter/subprocess.h b/aos/starter/subprocess.h
index ca7ef9d..eb36874 100644
--- a/aos/starter/subprocess.h
+++ b/aos/starter/subprocess.h
@@ -139,6 +139,14 @@
   void set_capture_stderr(bool capture);
   void set_run_as_sudo(bool value) { run_as_sudo_ = value; }
 
+  // Sets the time for a process to stop gracefully. If an application is asked
+  // to stop, but doesn't stop within the specified time limit, then it is
+  // forcefully killed. Defaults to 1 second unless overridden by the
+  // aos::Application instance in the constructor.
+  void set_stop_grace_period(std::chrono::nanoseconds stop_grace_period) {
+    stop_grace_period_ = stop_grace_period;
+  }
+
   bool autostart() const { return autostart_; }
 
   bool autorestart() const { return autorestart_; }
@@ -222,6 +230,7 @@
   std::optional<uid_t> user_;
   std::optional<gid_t> group_;
   bool run_as_sudo_ = false;
+  std::chrono::nanoseconds stop_grace_period_ = std::chrono::seconds(1);
 
   bool capture_stdout_ = false;
   PipePair stdout_pipes_;