start_devserver: trap and forward termination signals to devserver

With this change, interrupting the wrapper script will cause the
devserver itself (python) to terminate properly. This is particularly
necessary when start_devserver is invoked from other scripts.

BUG=None
TEST=devserver started and terminated properly

Change-Id: I4ede10454f0682773413a8276ee28b574022f0eb
Reviewed-on: https://gerrit.chromium.org/gerrit/32072
Reviewed-by: Chris Sosa <sosa@chromium.org>
Commit-Ready: Gilad Arnold <garnold@chromium.org>
Tested-by: Gilad Arnold <garnold@chromium.org>
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
diff --git a/host/start_devserver b/host/start_devserver
index 3c733e5..34666b9 100755
--- a/host/start_devserver
+++ b/host/start_devserver
@@ -14,8 +14,23 @@
 
 export DEFAULT_INSTALL_MASK
 
+# Trap and record various signals.
+for sig in INT TERM QUIT; do
+  trap "trap_sig=${sig}" ${sig}
+done
+
+# Spawn devserver in the background, record its pid.
 if [ -f /usr/lib/devserver/devserver.py ]; then
-  python /usr/lib/devserver/devserver.py "$@"
+  python /usr/lib/devserver/devserver.py "$@" &
 else
-  python /usr/bin/devserver.py "$@"
+  python /usr/bin/devserver.py "$@" &
+fi
+devserver_pid=$!
+
+# Wait for devserver to die, or a signal.
+wait
+
+# If interrupted by signal, forward it to the devserver.
+if [ -n "${trap_sig}" ]; then
+  kill -s ${trap_sig} ${devserver_pid}
 fi