New submission from Daniel Shaulov: Basically - subprocess.check_output("ping localhost", shell=True, timeout=5) Will hang forever.
What happens is that subprocess.run times out on communicate, sends SIGKILL *to the shell* and then calls communicate again without the timeout. But nothing actually closes the "ping" command so the second communicate will never exit. Even if we put a timeout on the second communicate, it won't be good enough because that "ping" will still be "leaked". This SO question is about the fact that kill doesn't work when shell=True, and might be relevant for this issue: http://stackoverflow.com/questions/4789837/how-to-terminate-a-python-subprocess-launched-with-shell-true As a possible fix I propose doing the following: 1. Add killpg to the Popen class. 2. Add an argument to run - "kill_group" that makes run use killpg instead of kill 3. Users can all: subprocess.check_output("ping localhost", shell=True, start_new_session=True, kill_group=True, timeout=5) And have it work fine. This is the best I could come up with, without breaking any existing behavior. Other options to consider: 1. Not have kill_group argument and to implicitly kill by group when start_new_session is True (but this is not really backwards compatible). 2. Having kill_group as an argument for Popen and not run, and when kill is called, it will call killpg if the option was specified. A patch is attached with my proposed solution. ---------- components: Library (Lib) files: killpg.patch keywords: patch messages: 261533 nosy: Daniel Shaulov, astrand priority: normal severity: normal status: open title: subprocess.check_output with shell=True ignores the timeout type: behavior versions: Python 3.5, Python 3.6 Added file: http://bugs.python.org/file42122/killpg.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue26534> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com