diff options
author | Helmut Grohne <helmut@subdivi.de> | 2025-06-26 10:05:21 +0200 |
---|---|---|
committer | Helmut Grohne <helmut@subdivi.de> | 2025-06-26 10:05:21 +0200 |
commit | 3f9a84e461d5ceb31dc20f9d2a21fa729d937db1 (patch) | |
tree | a84002ce4c2ff3283c00c7e9b8809b417781dba2 | |
parent | fc3d65d0b5c0273dcdd18e422fa4766e1fbd859e (diff) | |
download | python-linuxnamespaces-3f9a84e461d5ceb31dc20f9d2a21fa729d937db1.tar.gz |
handle SystemExit in run_in_fork reasonably
-rw-r--r-- | linuxnamespaces/__init__.py | 14 |
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 |