Skip to content

asyncio.Runner+PidfdChildWatcher leaves zombie processes #95899

@kumaraditya303

Description

@kumaraditya303
Contributor
import asyncio
import sys
import unittest

import asyncio

asyncio.set_child_watcher(asyncio.PidfdChildWatcher())


def create_free_port():
    return 4  # chosen by a fair dice roll


class TestProc(unittest.IsolatedAsyncioTestCase):
    async def asyncSetUp(self):
        self.port = create_free_port()
        self.proc = await asyncio.create_subprocess_exec(
            sys.executable,
            "-c",  # more realistically this might be an http server or database
            f"import time; print('listening on {self.port}'); import time; time.sleep(2); print('goodbye')",
        )

    async def testProc(self):
        print(f"connecting to {self.port}")

    async def asyncTearDown(self):
        await self.proc.communicate()  # hangs forever on 3.11


if __name__ == "__main__":
    unittest.main()

on python3.10 this produces:

connecting to 4
listening on 4
goodbye
.
----------------------------------------------------------------------
Ran 1 test in 2.022s

OK

on python3.11 it hangs forever in await self.proc.communicate()

Originally posted by @graingert in #95736 (comment)

Activity

graingert

graingert commented on Aug 11, 2022

@graingert
Contributor

#94184 would fix this specific combination. I suspect any ChildWatcher that implements attach_loop would be broken

changed the title [-]asyncio.Runner+PidFdChildWatcher leaves zombie processes[/-] [+]asyncio.Runner+PidfdChildWatcher leaves zombie processes[/+] on Aug 12, 2022
gvanrossum

gvanrossum commented on Aug 12, 2022

@gvanrossum
Member

Why the nonsense with self.port? It does not contribute to understanding the repro but adds useless detail that the reader has to understand before being able to ignore.

added a commit that references this issue on Aug 15, 2022
added 2 commits that reference this issue on Aug 15, 2022
914f636
8bd7a0b
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

3.11only security fixes3.12only security fixestopic-asynciotype-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @graingert@gvanrossum@kumaraditya303

      Issue actions

        asyncio.Runner+PidfdChildWatcher leaves zombie processes · Issue #95899 · python/cpython