通常情况下,后fork()
而前exec()
一个做getrlimit(RLIMIT_NOFILE, fds);
,然后关闭所有文件描述符低于fds
.
此外,close-on-exec
可以使用文件描述符设置fcntl()
,以便自动关闭exec()
.但是,这不是线程安全的,因为另一个线程可以fork()
在此线程打开新文件描述符之后但在它设置close-on-exec
标志之前.
在Linux上,这个问题已经通过向O_CLOEXEC
函数添加标志来解决,open()
因此不需要额外的调用来设置close-on-exec
标志.