Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #91597

Re: Best way to prevent zombie processes

From Marko Rauhamaa <marko@pacujo.net>
Newsgroups comp.lang.python
Subject Re: Best way to prevent zombie processes
Date 2015-06-01 01:22 +0300
Organization A noiseless patient Spider
Message-ID <87vbf88k0n.fsf@elektro.pacujo.net> (permalink)
References <87vbf8l9e7.fsf@Equus.decebal.nl>

Show all headers | View raw


Cecil Westerhof <Cecil@decebal.nl>:

> 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?

If you don't care to know when child processes exit, you can simply
ignore the SIGCHLD signal:

    import signal
    signal.signal(signal.SIGCHLD, signal.SIG_IGN)

That will prevent zombies from appearing.

On the other hand, if you want to know when a process exits, you have
several options:

 * What you propose would work, but is all but elegant. You want to
   react as soon as child processes die.

 * You could actually trap the SIGCHLD signal by setting a signal
   handler. You should not do any actual processing in the signal
   handler itself but rather convert the signal into a file descriptor
   event (with a pipe; Python doesn't seem to support signal file
   descriptors or event file descriptors).

 * Instead of a using a signal handler, you could capture the output of
   the child process. At its simplest, you capture the standard output,
   but you could also open an extra pipe for the purpose. You keep
   reading the standard output and as soon as you read an EOF, you wait
   the process out.


Marko

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Best way to prevent zombie processes Cecil Westerhof <Cecil@decebal.nl> - 2015-05-31 23:33 +0200
  Re: Best way to prevent zombie processes Marko Rauhamaa <marko@pacujo.net> - 2015-06-01 01:22 +0300
    Re: Best way to prevent zombie processes Cecil Westerhof <Cecil@decebal.nl> - 2015-06-01 11:20 +0200
      Re: Best way to prevent zombie processes Chris Angelico <rosuav@gmail.com> - 2015-06-01 20:04 +1000
        Re: Best way to prevent zombie processes Marko Rauhamaa <marko@pacujo.net> - 2015-06-01 13:21 +0300
      Re: Best way to prevent zombie processes Marko Rauhamaa <marko@pacujo.net> - 2015-06-01 13:25 +0300
    Re: Best way to prevent zombie processes Grant Edwards <invalid@invalid.invalid> - 2015-06-01 14:59 +0000
      Re: Best way to prevent zombie processes Marko Rauhamaa <marko@pacujo.net> - 2015-06-01 18:39 +0300
  Re: Best way to prevent zombie processes Cameron Simpson <cs@zip.com.au> - 2015-06-01 11:03 +1000
    Re: Best way to prevent zombie processes Cecil Westerhof <Cecil@decebal.nl> - 2015-06-01 11:23 +0200
  Re: Best way to prevent zombie processes Ben Finney <ben+python@benfinney.id.au> - 2015-06-01 13:37 +1000
  Re: Best way to prevent zombie processes Cecil Westerhof <Cecil@decebal.nl> - 2015-06-01 14:16 +0200
    Re: Best way to prevent zombie processes Marko Rauhamaa <marko@pacujo.net> - 2015-06-01 16:32 +0300
      Re: Best way to prevent zombie processes Cecil Westerhof <Cecil@decebal.nl> - 2015-06-01 16:37 +0200
    Re: Best way to prevent zombie processes Cecil Westerhof <Cecil@decebal.nl> - 2015-06-01 15:03 +0200

csiph-web