Issue #19309: asyncio: make waitpid() wait for all child processes, not only

those in the same process group.
parent f3e21ba5
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment