make test: kill all remaining subprocesses on exit 17/7517/2
authorKlement Sekera <ksekera@cisco.com>
Tue, 11 Jul 2017 05:29:37 +0000 (07:29 +0200)
committerDave Wallace <dwallacelf@gmail.com>
Mon, 7 Aug 2017 14:53:17 +0000 (14:53 +0000)
This change introduces a wrapper script which kills all processes in
the same process group as itself (with the exception of the script).
Using this script to run the unit tests should prevent stale processes
left behind in some cases (e.g. when test framework crashes).

Change-Id: If3b9201c06b87fa6be095721436893207d09b5e4
Signed-off-by: Klement Sekera <ksekera@cisco.com>
test/Makefile
test/scripts/run_with_cleanup.sh [new file with mode: 0755]

index 14c8cd2..7416afc 100644 (file)
@@ -76,7 +76,7 @@ $(PAPI_INSTALL_DONE): $(PIP_PATCH_DONE)
        @touch $@
 
 define retest-func
-       @bash -c "source $(PYTHON_VENV_PATH)/bin/activate && python run_tests.py -d $(TEST_DIR) $(UNITTEST_EXTRA_OPTS)"
+       @bash -c "source $(PYTHON_VENV_PATH)/bin/activate && setsid scripts/run_with_cleanup.sh python run_tests.py -d $(TEST_DIR) $(UNITTEST_EXTRA_OPTS)"
 endef
 
 .PHONY: sanity
diff --git a/test/scripts/run_with_cleanup.sh b/test/scripts/run_with_cleanup.sh
new file mode 100755 (executable)
index 0000000..dcaa58b
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+rv=0
+
+atexit() {
+       group_id=`ps -p $$ -o pgid=`
+       my_id=$$
+       ids=`pgrep -g $group_id -d ' ' | sed "s/\b$my_id\b//g"`
+       echo "Killing possible remaining process IDs: $ids"
+       for id in $ids
+       do
+               if ps -p $id > /dev/null
+               then
+                       kill -9 $id
+               fi
+       done
+       exit $rv
+}
+
+trap "atexit" SIGINT SIGTERM
+
+$*
+rv=$?
+atexit
+exit $rv