From 3f9a84e461d5ceb31dc20f9d2a21fa729d937db1 Mon Sep 17 00:00:00 2001 From: Helmut Grohne Date: Thu, 26 Jun 2025 10:05:21 +0200 Subject: handle SystemExit in run_in_fork reasonably --- linuxnamespaces/__init__.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'linuxnamespaces/__init__.py') diff --git a/linuxnamespaces/__init__.py b/linuxnamespaces/__init__.py index 21afd4a..ab8fa40 100644 --- a/linuxnamespaces/__init__.py +++ b/linuxnamespaces/__init__.py @@ -36,15 +36,18 @@ class run_in_fork: self.efd = None if start else EventFD() self.pid = os.fork() if self.pid == 0: + code = 0 try: if self.efd is not None: self.efd.read() self.efd.close() self.efd = None function() + except SystemExit as err: + code = err.code except: - os._exit(1) - os._exit(0) + code = 1 + os._exit(code) @classmethod def now(cls, function: typing.Callable[[], None]) -> typing.Self: @@ -101,6 +104,7 @@ class async_run_in_fork: self.efd = None if start else EventFD() self.pid = os.fork() if self.pid == 0: + code = 0 try: if self.efd: self.efd.read() @@ -108,9 +112,11 @@ class async_run_in_fork: self.efd = None asyncio.set_event_loop(None) function() + except SystemExit as err: + code = err.code except: - os._exit(1) - os._exit(0) + code = 1 + os._exit(code) watcher.add_child_handler(self.pid, self._child_callback) @classmethod -- cgit v1.2.3