按票数排序 显示最新答案 共有2个答案 (最后回答: 3年前 )
-
假设在某个情况下,父进程需要将子进程的标准I/O重定向到某个文件,但子进程无需或不能或没法知道此文件,总之就是不能通过open来打开。如果父进程打开的文件描述符都在exec时关闭的话,那子进程就没法访问这个文件了?
上面只是一种情况而已!
-
我想我知道原因了。这里分享一下我的理解。按照我所看到那份源码来说明。
程序设置了FD_CLOEXEC,可能是为了调用exec重新载入本进程以便更新。该程序中可能打开了大量接口与外面通讯。使用exec重新加载后,并没有释放文件描述符,而重新加载的程序不知道前一个程序都有哪些文件描述符打开了。这样多次重载后会快速耗尽文件描述符。
不知这样理解是否正确。不过如果程序不是很复杂的话,倒是应该可以把文件描述符放在一起,调用exec之前先检查文件描述符并关闭。