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 <rep...@bugs.python.org>
<http://bugs.python.org/issue25960>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to