On Wed, Jun 3, 2015 at 7:06 AM, Alain Ketterlin <al...@universite-de-strasbourg.fr.invalid> wrote: > I've no idea what the OP's program was doing, so I'm not going to split > hairs. I can't imagine why one would like to mass-close an arbitrary set > of file descriptors, and I think APIs like os.closerange() are toxic and > an appeal to sloppy programming.
When you fork, you get a duplicate referent to every open file in both parent and child. Closing them all in the child is very common, as it allows the parent to continue owning those file descriptors (so that when you close it in the parent, the resource is really closed). One notable example is with listening sockets; bind/listen in the parent, then fork (maybe to handle a client), then terminate the parent process. You now cannot restart the parent without aborting the child, as the child now owns that listening socket (even if it never wants to use it). There are some specific ways around this, but not on all OSes (eg Linux only added support for SO_REUSEPORT in 3.9), and the best way has always been to make sure the children don't hang onto the listening socket. (There are other good reasons for doing this, too.) ChrisA -- https://mail.python.org/mailman/listinfo/python-list