fix: reap leaders during group shutdown
This commit is contained in:
@@ -211,6 +211,7 @@ class ProcessManager:
|
||||
self._sleep = sleep
|
||||
self._profile_path = profile_path
|
||||
self._children: list[tuple[str, subprocess.Popen]] = []
|
||||
self._reaped_children: set[int] = set()
|
||||
self._groups: list[int] = []
|
||||
self._dead_groups: set[int] = set()
|
||||
self._stopping = False
|
||||
@@ -255,7 +256,19 @@ class ProcessManager:
|
||||
def _startup_stopping(self) -> bool:
|
||||
return self._stopping or self._first_exited_child() is not None
|
||||
|
||||
def _reap_exited_children(self) -> None:
|
||||
for _name, process in self._children:
|
||||
if process.pid in self._reaped_children or process.poll() is None:
|
||||
continue
|
||||
try:
|
||||
process.wait(timeout=None)
|
||||
except OSError:
|
||||
logging.error("Child process reap failed")
|
||||
else:
|
||||
self._reaped_children.add(process.pid)
|
||||
|
||||
def _live_groups(self) -> list[int]:
|
||||
self._reap_exited_children()
|
||||
live_groups = []
|
||||
for pgid in self._groups:
|
||||
if pgid in self._dead_groups:
|
||||
@@ -291,10 +304,14 @@ class ProcessManager:
|
||||
|
||||
def _reap_all(self) -> None:
|
||||
for _name, process in self._children:
|
||||
if process.pid in self._reaped_children:
|
||||
continue
|
||||
try:
|
||||
process.wait(timeout=None)
|
||||
except OSError:
|
||||
logging.error("Child process reap failed")
|
||||
else:
|
||||
self._reaped_children.add(process.pid)
|
||||
|
||||
def _shutdown(self) -> None:
|
||||
if not self._children:
|
||||
|
||||
Reference in New Issue
Block a user