Message257071
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. |
|
Date |
User |
Action |
Args |
2015-12-27 10:58:02 | chris.jerdonek | set | recipients:
+ chris.jerdonek |
2015-12-27 10:58:02 | chris.jerdonek | set | messageid: <1451213882.47.0.471062889789.issue25960@psf.upfronthosting.co.za> |
2015-12-27 10:58:02 | chris.jerdonek | link | issue25960 messages |
2015-12-27 10:58:01 | chris.jerdonek | create | |
|