STINNER Victor <vstin...@redhat.com> added the comment:
> In Unix, the zombie remains visible in the task list (marked as <defunct> in > Linux), but in Windows an exited process is removed from the Process > Manager's active list, so it's no longer visible to users. Also, a Process > object is reaped as soon as the last reference to it is closed, since clearly > no one needs it anymore. > (...) > We could call self._handle.Close() in _wait(), right after calling > GetExitCodeProcess(self._handle). With this change, __exit__ will ensure that > _handle gets closed in a deterministic context. I created bpo-37410 and PR 14391 to close the handle when the process completes. IMHO this change is easy and safe, it can be backported to Python 3.7 and 3.8. > Code that needs the handle indefinitely can call _handle.Detach() before > exiting the with-statement context, but that should rarely be necessary. > (...) > There should be a way to indicate a Popen instance is intended to continue > running detached from our process, so scripts don't have to ignore an > irrelevant resource warning. My point is that if you want to "detach" a process, it must be *explicit*. In my experience, processes are "leaked" implicitly: by mistake. In multiprocessing, it can be subtle, you don't manipulate subprocess.Popen directly. Users must not access private attributes (Popen._handle). After I added the ResourceWarning, I created bpo-27068 "Add a detach() method to subprocess.Popen". But I only created to reply to a request of Martin Panter, I didn't use this feature myself. At some point, I decided to just close the issue. Maybe it's time to reopen it. > I don't understand emitting a resource warning in Popen.__del__ if a process > hasn't been waited on until completion beforehand (i.e. self.returncode is > None). If a script wants to be strict about this, it can use a with > statement, which is documented to wait on the process. The purpose is to help developers to find bugs in their bugs. Many are now aware that programs continue to run in the background and that leaking zombie processes is an issue on Unix. The process is not polled to be able to emit the warning in more cases, again, to ease debug. The warning is ignored by default. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue37380> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com