New submission from gabriele.trombetti <g.trombe...@plasmacore.com>:

There seems to be a file descriptor (fd) leak in subprocess upon call to kill() 
and then destroying the current subprocess object (e.g. by scope exit) if the 
pipe functionality is being used.

This is a reproducer:

(Linux 2.6.25, Python 2.7.1 (r271:86832))

import subprocess, time
def leaktest():
    subp = subprocess.Popen("echo hi; sleep 200; echo bye", shell=True, 
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    #you can do something here
    subp.terminate()
    #subp.wait() #Fixes the bug
    #time.sleep(0.001) #fixes the bug
    #time.sleep(0.0000001) #doesn't fix the bug
    return True

Launch the function multiple times interactively, each time the number of open 
file descriptors for the python process will increase by 2. You can see that by 
"ls -l /proc/<pid>/fd"
This seems to be a race condition because adding a time.sleep(0.001) before the 
return fixes the problem. Probably some kernel delay is responsible for the 
race. 

This bug is significant for daemons because the daemon will die once the number 
of open file descriptors hits the ulimit, usually 1024, so please fix. 

Note: until the bug is fixed, a simple workaround (not documented in module 
docs though) is to call Popen.wait() after Popen.kill()

Thank you

----------
components: Library (Lib)
messages: 141295
nosy: gabriele.trombetti
priority: normal
severity: normal
status: open
title: Subprocess leaks fd upon kill()
type: behavior
versions: Python 2.7

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

Reply via email to