如果您在父进程上执行fork()并创建子进程,然后子进程关闭从fork(父进程)继承的fd(文件描述符)。既然它们是独立的,那么文件会在父文件中保持打开状态吗?那么标准i/o或stderr呢?
fork()
fork
fd
e5nszbig1#
不管文件描述符代表的是文件还是设备,也不管它是否曾作为标准I/O描述符传递给任何进程:如果你在一个进程中关闭它,另一个进程仍然有一个有效的描述符。(This是很自然的。想象一下,描述符将与其他进程中的描述符相互依赖。然后,如果一个子进程意外崩溃,一旦检测到崩溃,父进程甚至很难记录这个事实。它不能通过任何以前打开的描述符记录这个事实,因为所有形式的进程退出都涉及到关闭所有打开的描述符。2因此,故障模式往往会在进程之间传播。3此外,即使是常规的,通过这种假设的共享描述符的无错误I/O模式将在竞争条件中大量存在。
1条答案
按热度按时间e5nszbig1#
不管文件描述符代表的是文件还是设备,也不管它是否曾作为标准I/O描述符传递给任何进程:如果你在一个进程中关闭它,另一个进程仍然有一个有效的描述符。
(This是很自然的。想象一下,描述符将与其他进程中的描述符相互依赖。然后,如果一个子进程意外崩溃,一旦检测到崩溃,父进程甚至很难记录这个事实。它不能通过任何以前打开的描述符记录这个事实,因为所有形式的进程退出都涉及到关闭所有打开的描述符。2因此,故障模式往往会在进程之间传播。3此外,即使是常规的,通过这种假设的共享描述符的无错误I/O模式将在竞争条件中大量存在。