Skip to content

Test driver doesn't always kill child processes

Summary

If I run a (compiler performance) test that causes GHC to run for a long time, then interrupt the test with Ctrl-C, the background process being tested is not always interrupted. This can be particularly problematic if the branch I'm testing has a bug that causes GHC to loop consuming 100% CPU, because I have to manually kill the background process.

Steps to reproduce

I noticed this with the test introduced in 3945b22f and a locally-modified GHC checkout. Presumably this should be reproducible with other tests though. My specific Hadrian invocation was:

hadrian/build -j --skip-depends --docs=none --flavour=perf -o_build_perf2 --freeze1 test --test-root-dirs=testsuite/tests/perf --only=T15703

I waited until the test started running, then hit Ctrl-C. This produced the following test output:

=====> 1 of 1 [0, 0, 0]
^C
Performance Metrics (test environment: local):


None collected.


SUMMARY for test run started at Fri Apr  9 10:31:54 2021 
0:00:00.792117 spent to go through
       1 total tests, which gave rise to
       4 test cases, of which
       0 were skipped

       0 had missing libraries
       0 expected passes
       0 expected failures

       0 caused framework failures
       0 caused framework warnings
       0 unexpected passes
       0 unexpected failures
       0 unexpected stat failures
       0 fragile tests

user interrupt

In the background, the following processes were still running:

/bin/sh -c cd "/tmp/ghctest-anvmbliz/test   spaces/testsuite/tests/perf/compiler/T15703.run" &&  ".../ghc/_build_perf2/stage1/bin/ghc" --make  T15703 -no-user-package-db -rtsopts -fno-warn-missed-specialisations -fshow-warning-groups -fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat -dno-debug-output  -v0 -O +RTS -V0 -tT15703.comp.stats --machine-readable -RTS
.../ghc/_build_perf2/stage1/bin/ghc --make T15703 -no-user-package-db -rtsopts -fno-warn-missed-specialisations -fshow-warning-groups -fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat -dno-debug-output -v0 -O +RTS -V0 -tT15703.comp.stats --machine-readable -RTS

Expected behavior

When I hit Ctrl-C to interrupt a test, all processes associated with that test should be killed.

Environment

  • GHC version used: GHC HEAD (actually a branch off 3945b22f heavily modified locally) bootstrapped with 9.0.1
  • Operating System: Linux
  • System Architecture: x86_64
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information