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