mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
Issue #19309: asyncio: make waitpid() wait for all child processes, not only
those in the same process group.
This commit is contained in:
parent
f3e21ba5af
commit
bcd76827f4
2 changed files with 21 additions and 1 deletions
|
@ -168,7 +168,7 @@ class SelectorEventLoop(selector_events.BaseSelectorEventLoop):
|
|||
def _sig_chld(self):
|
||||
try:
|
||||
try:
|
||||
pid, status = os.waitpid(0, os.WNOHANG)
|
||||
pid, status = os.waitpid(-1, os.WNOHANG)
|
||||
except ChildProcessError:
|
||||
return
|
||||
if pid == 0:
|
||||
|
|
|
@ -1233,6 +1233,26 @@ class EventLoopTestsMixin:
|
|||
self.loop.run_until_complete(proto.completed)
|
||||
self.assertEqual(-signal.SIGTERM, proto.returncode)
|
||||
|
||||
@unittest.skipIf(sys.platform == 'win32',
|
||||
"Don't support subprocess for Windows yet")
|
||||
def test_subprocess_wait_no_same_group(self):
|
||||
proto = None
|
||||
transp = None
|
||||
|
||||
@tasks.coroutine
|
||||
def connect():
|
||||
nonlocal proto
|
||||
# start the new process in a new session
|
||||
transp, proto = yield from self.loop.subprocess_shell(
|
||||
functools.partial(MySubprocessProtocol, self.loop),
|
||||
'exit 7', stdin=None, stdout=None, stderr=None,
|
||||
start_new_session=True)
|
||||
self.assertIsInstance(proto, MySubprocessProtocol)
|
||||
|
||||
self.loop.run_until_complete(connect())
|
||||
self.loop.run_until_complete(proto.completed)
|
||||
self.assertEqual(7, proto.returncode)
|
||||
|
||||
|
||||
if sys.platform == 'win32':
|
||||
from asyncio import windows_events
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue