Best way to prevent zombie processes

Marko Rauhamaa marko at pacujo.net
Mon Jun 1 11:39:05 EDT 2015


Grant Edwards <invalid at invalid.invalid>:

> On 2015-05-31, Marko Rauhamaa <marko at pacujo.net> wrote:
>> 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.
>
> Bravo!  I've been writing Unix apps for 30 years, and I did not know
> that.  Is this something recent[1], or have I somehow managed to avoid
> this useful bit of info for that long?

I wasn't aware of it ever having been any other way. However:

   POSIX.1-1990 disallowed setting the action for SIGCHLD to SIG_IGN.
   POSIX.1-2001 allows this possibility, so that ignoring SIGCHLD can be
   used to prevent the creation of zombies (see wait(2)). Nevertheless,
   the historical BSD and System V behaviors for ignoring SIGCHLD
   differ, so that the only completely portable method of ensuring that
   terminated children do not become zombies is to catch the SIGCHLD
   signal and perform a wait(2) or similar.

   <URL: http://man7.org/linux/man-pages/man2/sigaction.2.html>

If you possess the Stevens book, you'd probably find out how SIGC(H)LD
was treated in BSD and System V. I can't remember despite programming
for either environment.


Marko



More information about the Python-list mailing list