New submission from Chris Jerdonek:
I came across a situation where Popen.wait() hangs and os.waitpid() doesn't
hang. It seems like a bug, but I don't know for sure. This is with Python
3.5.1.
To reproduce, save the following to demo.py:
import os, signal, subprocess
class State:
process = None
def handle_signal(signalnum, frame):
print("Handling: {0}".format(signalnum))
p = State.process
# The following line hangs:
p.wait()
# However, this line does not hang:
# os.waitpid(p.pid, 1)
print("Done waiting")
signal.signal(signal.SIGINT, handle_signal)
p = subprocess.Popen("while true; do echo sleeping; sleep 2; done",
shell=True)
State.process = p
p.wait()
Then run the following, hit Control-C, and it will hang:
$ python demo.py
sleeping
sleeping
^CHandling: 2
It will still hang if you insert "p.terminate()" right before p.wait().
However, calling "os.waitpid(p.pid, ...)" instead of p.wait() exits immediately
and does not hang. The behavior also occurs without shell=True.
----------
components: Library (Lib)
messages: 257071
nosy: chris.jerdonek
priority: normal
severity: normal
status: open
title: Popen.wait() hangs with SIGINT when os.waitpid() does not
type: behavior
versions: Python 3.5
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue25960>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com