Best way to prevent zombie processes
Cecil Westerhof
Cecil at decebal.nl
Mon Jun 1 08:16:21 EDT 2015
Op Sunday 31 May 2015 23:33 CEST schreef Cecil Westerhof:
> At the moment I have the following code:
> os.chdir(directory)
> for document in documents:
> subprocess.Popen(['evince', document])
>
> With this I can open several documents at once. But there is no way
> to know when those documents are going to be closed. This could/will
> lead to zombie processes. (I run it on Linux.) What is the best
> solution to circumvent this?
>
> I was thinking about putting all Popen instances in a list. And then
> every five minutes walk through the list and check with poll if the
> process has terminated. If it has it can be released from the list.
> Of-course I need to synchronise those events. Is that a good way to
> do it?
With some investigation I decided on something completely different.
I made a class:
import os
import subprocess
from os.path import expanduser
from threading import Thread
class DocumentsToShow:
def show_documents(self):
if self._desktop != -1:
subprocess.check_call(['wmctrl', '-s', str(self._desktop - 1)])
os.chdir(self._directory)
for document in self._documents:
Popen_without_zombie(['evince', document])
def __init__(self, name, desktop, directory, documents):
'''Initialise the class'''
self._name = name
self._desktop = desktop
self._directory = expanduser(directory)
self._documents = documents
And this class uses the following function:
def Popen_without_zombie(command):
p = subprocess.Popen(command)
Thread(target = p.wait).start()
The class takes a name for the collection, which desktop to display it
on, the directory that contains the documents and a list of documents.
With show_documents they are displayed.
How about this way of solving it?
About the improvement of the class. Now it is always evince that is
used to open a document. But it would be nice if it was a little less
picky. What is the preferred way to solve this?
- Defining a set the user can choose from.
- Making it a string parameter and expecting the user to know what he
is doing.
--
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof
More information about the Python-list
mailing list