os.fork() question?

Andrew MacIntyre andymac at bullseye.apana.org.au
Thu Sep 16 09:01:10 EDT 2004


On Wed, 14 Sep 2004, Ishwar Rattan wrote:

> Erik Heneryd <erik at heneryd.com> wrote in message news:<mailman.3271.1095110255.5135.python-list at python.org>...
> > Ishwar Rattan wrote:
> > > Info at http://doc.python.org/ on os.fork() says that
> > >   it has 'unix' semantics (on a UNIX box) on return values
> > >   child pid in parent, 0 in child, no mention of failure?
> > >
> > > So, what does it return on failure? I tried it under Linux
> > > with Python-2.3.4, after few thousand forks the system just hangs!
> > > (does not return/report fork failure)
> >
> > It raises OSError.
> >
> The following code when executed kills controlling xterm+X-window system,
> but the system does not hang.
>
> -ishwar
> ---
> import os, signal, sys, time
>
> def child():
>     signal.pause()
>     print 'this from child with pid: ', os.getpid()
>     sys.exit(2)
>
> def main():
>     print 'forking child..'
>     while 1:
>        try:
>            cpid = os.fork()
>        except OSError:
>            raise 'fork failed..'
>        if cpid == 0:
>            child()
>        else:
>            print 'fork success..', cpid
>
> main()

You don't give much detail about your Linux environment, but be aware:
- Python by default is built with threading;
- signals in the presence of threads are a potential issue,
  even though the above code doesn't activate threads, because your
  Python process is using the threaded C library;
- ditto fork();
- various thread implementations have had bugs at various times in
  relation to signals and process management;
- the above code may be being treated as a "fork bomb" by Linux; in which
  case, the Python process(es) is/are summarily killed, possibly leaving
  lots of zombie processes around....

You may care to try building a Python interpreter without threads support
to test whether the some of the issues I mention above are implicated.

-------------------------------------------------------------------------
Andrew I MacIntyre                     "These thoughts are mine alone..."
E-mail: andymac at bullseye.apana.org.au  (pref) | Snail: PO Box 370
        andymac at pcug.org.au             (alt) |        Belconnen ACT 2616
Web:    http://www.andymac.org/               |        Australia



More information about the Python-list mailing list