This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Title: webbrowser creates zombi processes in the background mode
Type: Stage: resolved
Components: Versions: Python 3.9, Python 3.8, Python 3.7, Python 3.6, Python 3.5
Status: closed Resolution: out of date
Dependencies: Superseder:
Assigned To: Nosy List: brendan-donegan, kernc, martin.panter, serhiy.storchaka, vstinner
Priority: normal Keywords:

Created on 2016-05-20 12:23 by vstinner, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (7)
msg265939 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2016-05-20 12:23
The webbrowser opens almost all browsers in background mode, it looks like only Elinks is not opened in this mode.

Problem: the webbrowser doesn't read the exit status of the browser, and so create zombi process. On Python 3.6, the subprocess module now emits a ResourceWarning in this case (issue #26741).

For example, the following script shows a zombi process ("<defunc>"):
import webbrowser, os

b = webbrowser.get("firefox")"")
b = None

os.system("ps ax|grep firefox")
input("press ENTER when firefox exited")
os.system("ps ax|grep firefox")

I guess that Python should use os.fork() somehow to fix this issue.

Another option is to hack the Popen object to not display the warning, but I don't think that it's a safe option.

See also the issue #27068 "Add a detach() method to subprocess.Popen", but I don't think that it is directly related to background processes run by webbrowser.
msg265944 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2016-05-20 13:33
I checked how "xdg-open" works. It looks like the command works as webbrowser: create a child process "firefox URL", but then it waits until the command completes.

In fact, "firefox URL" exits quickly. So we can try "background = False" for firefox. Well, at least with my Firefox 46.0.1.
msg265945 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2016-05-20 14:07
I think the Firefox command will exit immediately if it just signals an existing Firefox process and window, but becomes the main Firefox process if there isn’t already one running.

Background = False sounds like it won’t help. Don’t we want the opposite?
msg283326 - (view) Author: Brendan Donegan (brendan-donegan) * Date: 2016-12-15 15:33
This appears to be Firefox specific? At least:

b = webbrowser.get("chromium-browser")"")

returns simply:


With no exception
msg313085 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2018-03-01 08:12
Isn't this a duplicate of issue5993?
msg314015 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2018-03-17 21:29
It does look similar. They probably could be merged. The main difference is in Issue 5993 Eivind suggested to somehow use a “wait” system call, while here Victor suggested “fork” (perhaps to orphan a grandchild process?).
msg402388 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2021-09-21 22:15
Python 3.6 was released 5 years ago. Nobody complained about ResourceWarning. While it would be nice to fix the issue, nobody managed to write a fix in 5 years and this issue has no activity for 3 years. I close the issue.
Date User Action Args
2022-04-11 14:58:31adminsetgithub: 71256
2021-09-21 22:15:08vstinnersetstatus: open -> closed
resolution: out of date
messages: + msg402388

stage: resolved
2020-01-11 17:24:52kerncsetnosy: + kernc

versions: + Python 3.7, Python 3.8, Python 3.9
2018-03-17 21:29:49martin.pantersetmessages: + msg314015
2018-03-01 08:12:06serhiy.storchakasetnosy: + serhiy.storchaka
messages: + msg313085
2016-12-15 15:33:58brendan-donegansetnosy: + brendan-donegan
messages: + msg283326
2016-05-20 14:07:35martin.pantersetmessages: + msg265945
2016-05-20 13:33:10vstinnersetmessages: + msg265944
2016-05-20 12:23:17vstinnercreate