mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-02 06:05:53 +00:00
When a user runs a script and presses control-C, a SIGINT (signal 2) gets sent to every process in the script's "process group". By default, every subprocess started by a script joins the parent's process group. Our test/*/run test-runner scripts typically start two processes: scylla and pytest. If we keep them in the same process group, a control-C would kill them in a random order and that is ugly - if Scylla is killed before pytest, we'll see a few test failures before pytest is finally killed. So the existing code put Scylla in its own process group, and killed it on exit after killing pytest. But there were a few inconsistencies in our implementation, leading to some annoying behaviors: 1. Doing "kill -2" to the runner's process (not a control-C which sends a signal to the process group) caused scylla and pytest to be killed on exit. So far so good. But, we should kill their entire process groups, not just the one process. This is important when pytest starts its own subprocesses (as happens in cql-pytest/test_tools.py), otherwise they just remain running. We need to call pgkill() instead of kill(), but also we forgot to start a new process group for the pytest run - so this patch fixes it. 2. Our exit handler - which kills the subprocesses - only gets called on signals which Python catches, and this is only SIGINT. Killing the test runner with SIGTERM or SIGHUP before this patch caused the subprocesses to be left running. In this patch we also catch SIGTERM and SIGHUP, so our exit handler is also run in that case. Signed-off-by: Nadav Har'El <nyh@scylladb.com> Closes #10629