From: Charles-François Natali Date: Sun, 20 Oct 2013 18:31:43 +0000 (+0200) Subject: Issue #19309: asyncio: make waitpid() wait for all child processes, not only X-Git-Tag: v3.4.0b1~571^2~47 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bcd76827f4ef869454634cabefb695ff7e63967d;p=thirdparty%2FPython%2Fcpython.git Issue #19309: asyncio: make waitpid() wait for all child processes, not only those in the same process group. --- diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py index a234f4fac13a..7623f789d312 100644 --- a/Lib/asyncio/unix_events.py +++ b/Lib/asyncio/unix_events.py @@ -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: diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py index f0f4810f6752..10ddabb8ed43 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -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