Am 20.06.2012 14:43, schrieb Ian Barber: > This is interesting - I wonder if this is somethign that would help the > situations where people do use fork to manage their children (in PHP > that happens a fair bit).
No, CLOEXEC doesn't help you with fork() only programs. Just fork() call doesn't evaluate the CLOEXEC flags (O_CLOEXEC, SOCK_CLOEXEC). Only the execv() family of function affect FDs with the CLOEXEC flags. (For the Windows developers and those who are not acquaint with low level POSIX apis: fork() clones the current process including most data structures, file descriptors and other resources. The memory isn't actually copied on most systems as fork() uses copy-on-write. execv() replaces the current process image with a new binary. fork() + execv() are used to execute a program. It feels a bit strange that Unix processes give birth to a child and immediately replace the new born with a different thing.) For CPython core we had to introduce an API function that re-initializes several data structures after fork, This function must be called as early as possible in the child after fork(). [1] ZMQ could introduce a similar API hook. You'd have to register all file descriptors in a central registry, remove the FDs on close and close() the FDs after fork(). That's lots of work but C++ should make it easie Christian [1] http://docs.python.org/py3k/c-api/sys.html?highlight=pyos_afterfork#PyOS_AfterFork _______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
