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>
This commit is contained in:
Klement Sekera
2017-07-11 07:29:37 +02:00
committed by Dave Wallace
parent 5391e19c9c
commit 94384e4d3a
2 changed files with 26 additions and 1 deletions

View 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

View File

@ -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