summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKlement Sekera <ksekera@cisco.com>2017-07-11 07:29:37 +0200
committerDave Wallace <dwallacelf@gmail.com>2017-08-07 14:53:17 +0000
commit94384e4d3a4143578d5140c386188fd389754ebf (patch)
tree86a9cdea86b5ad535edaa8bb6314580d2456f0f3
parent5391e19c9cb56e53437c8634725f130283bc5951 (diff)
make test: kill all remaining subprocesses on exit
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>
-rw-r--r--test/Makefile2
-rwxr-xr-xtest/scripts/run_with_cleanup.sh25
2 files changed, 26 insertions, 1 deletions
diff --git a/test/Makefile b/test/Makefile
index 14c8cd268ef..7416afc2295 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -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
index 00000000000..dcaa58b4498
--- /dev/null
+++ b/test/scripts/run_with_cleanup.sh
@@ -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