]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-69: send SIGTERM to ask systemd-nspawn to properly stop the container
authorFranck Bui <fbui@suse.com>
Thu, 8 Feb 2024 15:11:21 +0000 (16:11 +0100)
committerFranck Bui <fbui@suse.com>
Fri, 9 Feb 2024 17:07:08 +0000 (18:07 +0100)
The terminate() method sends SIGHUP but this signal is not handled by
systemd-nspawn hence the process just exits leaving the container scope around
breaking futher test executions.

This patch sends SIGTERM instead which is a defined API to request
sytemd-nspawn to stop and release the container's resources properly.

Follow-up for 8a7032cfb108c6daa395686320d9361c2195860a.

test/test-shutdown.py

index 5339afcdd09147ef5301626a6e3642d5933ff088..e491f1e1a94ed90f567f606f0ba28dba8fef584a 100755 (executable)
@@ -4,6 +4,7 @@
 
 import argparse
 import logging
+import signal
 import sys
 import time
 
@@ -91,13 +92,10 @@ def run(args):
     except Exception as e:
         logger.error(e)
         logger.info("killing child pid %d", console.pid)
-        # We can't use console.terminate(force=True) right away, since
-        # the internal delay between sending a signal and checking the process
-        # is just 0.1s [0], which means we'd get SIGKILLed pretty quickly.
-        # Let's send SIGHUP/SIGINT first, wait a bit, and then follow-up with
-        # SIGHUP/SIGINT/SIGKILL if the process is still alive.
-        # [0] https://github.com/pexpect/pexpect/blob/acb017a97332c19a9295660fe87316926a8adc55/pexpect/spawnbase.py#L71
-        console.terminate()
+
+        # Ask systemd-nspawn to stop and release the container's resources properly.
+        console.kill(signal.SIGTERM)
+
         for _ in range(10):
             if not console.isalive():
                 break