fork, exec, and disown

Benoit Dejean bnet at ifrance.com
Sun Feb 8 11:37:51 EST 2004


Le Sun, 08 Feb 2004 22:22:37 +0800, Isaac To a écrit :


> You can do that, but if you run ps you'll notice that all you processes
> get into a Z (zombie), <defunct> state.  Sooner or later you'll have the
> fork() giving you error that "resource temporarily not available"
> because all process numbers are used up.

you're right, i haven't noticed that

> With the "double fork" technique you can avoid this by adding a wait at
> the end:
> 
> def fork_exec_disown(cmd, dir="~"):
>     if os.fork() == 0:
>         if os.fork():
>             sys.exit(0)
>         os.chdir(os.path.expanduser(dir))
>         cmd = cmd.split()
>         os.execvp(cmd[0], cmd)
>     os.wait()

ok, i use this

> The wait will wait only for the child, not the grand-child.  If you
> don't have that you'll start accumulating zombies.  In some OS you can
> avoid the double forking overhead by manipulating the signal handler of
> SIGCHLD (so that it has the flag SA_NOCLDWAIT and has handler SIG_IGN),
> but that is more platform dependent than fork().

could you tell me more about that ?
because i am really interested in. i want to have the best/fastest
replacement for os.system

thank you



More information about the Python-list mailing list