Try to kill child processes of storage hook
This commit is contained in:
parent
1e011e7011
commit
2851525e15
@ -20,6 +20,7 @@ import contextlib
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import shlex
|
import shlex
|
||||||
|
import signal
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from radicale import pathutils
|
from radicale import pathutils
|
||||||
@ -63,6 +64,7 @@ class StorageLockMixin:
|
|||||||
# Use new process group for child to prevent terminals
|
# Use new process group for child to prevent terminals
|
||||||
# from sending SIGINT etc.
|
# from sending SIGINT etc.
|
||||||
if os.name == "posix":
|
if os.name == "posix":
|
||||||
|
# Process group is also used to identify child processes
|
||||||
popen_kwargs["preexec_fn"] = os.setpgrp
|
popen_kwargs["preexec_fn"] = os.setpgrp
|
||||||
elif os.name == "nt":
|
elif os.name == "nt":
|
||||||
popen_kwargs["creationflags"] = (
|
popen_kwargs["creationflags"] = (
|
||||||
@ -75,6 +77,11 @@ class StorageLockMixin:
|
|||||||
except BaseException: # e.g. KeyboardInterrupt or SystemExit
|
except BaseException: # e.g. KeyboardInterrupt or SystemExit
|
||||||
p.kill()
|
p.kill()
|
||||||
raise
|
raise
|
||||||
|
finally:
|
||||||
|
if os.name == "posix":
|
||||||
|
# Try to kill child processes
|
||||||
|
with contextlib.suppress(OSError):
|
||||||
|
os.killpg(p.pid, signal.SIGKILL)
|
||||||
if stdout_data:
|
if stdout_data:
|
||||||
logger.debug("Captured stdout hook:\n%s", stdout_data)
|
logger.debug("Captured stdout hook:\n%s", stdout_data)
|
||||||
if stderr_data:
|
if stderr_data:
|
||||||
|
Loading…
Reference in New Issue
Block a user