summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelmut Grohne <helmut@subdivi.de>2025-06-26 10:05:21 +0200
committerHelmut Grohne <helmut@subdivi.de>2025-06-26 10:05:21 +0200
commit3f9a84e461d5ceb31dc20f9d2a21fa729d937db1 (patch)
treea84002ce4c2ff3283c00c7e9b8809b417781dba2
parentfc3d65d0b5c0273dcdd18e422fa4766e1fbd859e (diff)
downloadpython-linuxnamespaces-3f9a84e461d5ceb31dc20f9d2a21fa729d937db1.tar.gz
handle SystemExit in run_in_fork reasonably
-rw-r--r--linuxnamespaces/__init__.py14
1 files changed, 10 insertions, 4 deletions
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