[Python-Dev] fork or exec? (original) (raw)

Antoine Pitrou solipsis at pitrou.net
Thu Jan 10 11:48:51 CET 2013


Le Thu, 10 Jan 2013 11:35:29 +0100, Charles-François Natali <neologix at free.fr> a écrit :

> So, I read your e-mail again and I'm wondering if you're making a > logic error, or if I'm misunderstanding something: > > 1. first you're talking about duplicate file or socket objects after > fork() (which is an issue I agree is quite annoying) > > 2. the solution you're proposing doesn't close the file descriptors > after fork() but after exec(). > > Basically the solution doesn't address the problem. Many fork() > calls aren't followed by an exec() call (multiprocessing comes to > mind).

Yes. In this specific case, the proper solution is to close the server socket right after fork() in the child process. We can't do anything about file descriptors inherited upon fork() (and shouldn't do anything of course, except on an individual basis like this socket server example).

Having an official afterfork facility would still help. I currently rely on multiprocessing.util.register_after_fork(), even though it's an undocumented API (and, of course, it works only for those child processes launched by multiprocessing, not other fork() uses).

Regards

Antoine.



More information about the Python-Dev mailing list