New submission from Mike Pomraning:

Python 3.3 introduces timeout support in subprocess.call, implemented by 
sending a SIGKILL if the Popen.wait is interrupted by a TimeoutExpired 
exception.

However, the "except" clause is too broad, and will, for instance, trigger on a 
KeyboardInterrupt.  For practical purposes, this means that sending a Ctrl-C to 
a python program before 3.3 sent a SIGINT to both the parent and 
subprocess.call()d child, whereas under 3.3+ sends a SIGINT _and_ a SIGKILL to 
the child.  The child will not be able to clean up appropriately.

For a real world example of this, see http://stackoverflow.com/q/34458583/132382

The fix is, I think, simply changing the clause to "except TimeoutExpired".  At 
least, that works for me.  See attached patch.

----------
components: Library (Lib)
files: subprocess-call-py344-kill-only-on-timeout.patch
keywords: patch
messages: 256973
nosy: Mike Pomraning
priority: normal
severity: normal
status: open
title: subprocess.call SIGKILLs too liberally
type: behavior
versions: Python 3.3
Added file: 
http://bugs.python.org/file41407/subprocess-call-py344-kill-only-on-timeout.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue25942>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to