mirror of
https://github.com/python/cpython.git
synced 2025-08-31 22:18:28 +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):
|
def _sig_chld(self):
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
pid, status = os.waitpid(0, os.WNOHANG)
|
pid, status = os.waitpid(-1, os.WNOHANG)
|
||||||
except ChildProcessError:
|
except ChildProcessError:
|
||||||
return
|
return
|
||||||
if pid == 0:
|
if pid == 0:
|
||||||
|
|
|
@ -1233,6 +1233,26 @@ class EventLoopTestsMixin:
|
||||||
self.loop.run_until_complete(proto.completed)
|
self.loop.run_until_complete(proto.completed)
|
||||||
self.assertEqual(-signal.SIGTERM, proto.returncode)
|
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':
|
if sys.platform == 'win32':
|
||||||
from asyncio import windows_events
|
from asyncio import windows_events
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue