forked from goodboy/tractor
Comment hard-kill-sidestep for now since nursery version covers it?
parent
ecefca8756
commit
4e53605dd4
|
@ -157,6 +157,7 @@ async def cancel_on_completion(
|
||||||
|
|
||||||
async def do_hard_kill(
|
async def do_hard_kill(
|
||||||
proc: trio.Process,
|
proc: trio.Process,
|
||||||
|
|
||||||
) -> None:
|
) -> None:
|
||||||
# NOTE: this timeout used to do nothing since we were shielding
|
# NOTE: this timeout used to do nothing since we were shielding
|
||||||
# the ``.wait()`` inside ``new_proc()`` which will pretty much
|
# the ``.wait()`` inside ``new_proc()`` which will pretty much
|
||||||
|
@ -209,44 +210,46 @@ async def spawn_subactor(
|
||||||
yield proc
|
yield proc
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
log.debug(f"Attempting to kill {proc}")
|
log.runtime(f"Attempting to kill {proc}")
|
||||||
|
|
||||||
# XXX: do this **after** cancellation/tearfown
|
# XXX: do this **after** cancellation/tearfown
|
||||||
# to avoid killing the process too early
|
# to avoid killing the process too early
|
||||||
# since trio does this internally on ``__aexit__()``
|
# since trio does this internally on ``__aexit__()``
|
||||||
|
|
||||||
if (
|
# if (
|
||||||
is_root_process()
|
# is_root_process()
|
||||||
|
|
||||||
# XXX: basically the pre-closing of stdstreams in a
|
# # XXX: basically the pre-closing of stdstreams in a
|
||||||
# root-processe's ``trio.Process.aclose()`` can clobber
|
# # root-processe's ``trio.Process.aclose()`` can clobber
|
||||||
# any existing debugger session so we avoid
|
# # any existing debugger session so we avoid
|
||||||
and _runtime_vars['_debug_mode']
|
# and _runtime_vars['_debug_mode']
|
||||||
and _global_actor_in_debug is not None
|
# and _global_actor_in_debug is not None
|
||||||
):
|
# ):
|
||||||
# XXX: this is ``trio.Process.aclose()`` MINUS the
|
# # XXX: this is ``trio.Process.aclose()`` MINUS the
|
||||||
# std-streams pre-closing steps inside ``proc.__aexit__()``
|
# # std-streams pre-closing steps inside ``proc.__aexit__()``
|
||||||
# (see below) which incluses a ``Process.kill()`` call
|
# # (see below) which incluses a ``Process.kill()`` call
|
||||||
|
|
||||||
log.critical(
|
# log.error(
|
||||||
"Root process tty is locked in debug mode by "
|
# "Root process tty is locked in debug mode by "
|
||||||
f"{_global_actor_in_debug}. If the console is hanging, you "
|
# f"{_global_actor_in_debug}. If the console is hanging, you "
|
||||||
"may need to trigger a KBI to kill any "
|
# "may need to trigger a KBI to kill any "
|
||||||
"not-fully-initialized" " subprocesses and allow errors "
|
# "not-fully-initialized" " subprocesses and allow errors "
|
||||||
"from `trio` to propagate"
|
# "from `trio` to propagate"
|
||||||
)
|
# )
|
||||||
try:
|
# try:
|
||||||
# one more graceful wait try can can be cancelled by KBI
|
# # one more graceful wait try can can be cancelled by KBI
|
||||||
# sent by user.
|
# # sent by user.
|
||||||
await proc.wait()
|
# await proc.wait()
|
||||||
|
|
||||||
finally:
|
# finally:
|
||||||
if proc.returncode is None:
|
# if proc.returncode is None:
|
||||||
# with trio.CancelScope(shield=True):
|
# # with trio.CancelScope(shield=True):
|
||||||
await do_hard_kill(proc)
|
# # await proc.wait()
|
||||||
else:
|
|
||||||
# with trio.CancelScope(shield=True):
|
# await do_hard_kill(proc)
|
||||||
await do_hard_kill(proc)
|
# else:
|
||||||
|
|
||||||
|
await do_hard_kill(proc)
|
||||||
|
|
||||||
|
|
||||||
async def new_proc(
|
async def new_proc(
|
||||||
|
|
Loading…
Reference in New Issue