【问题标题】:Parent/child process close file descriptor父/子进程关闭文件描述符
【发布时间】:2012-04-29 05:22:47
【问题描述】:

如果您在父进程上执行 fork() 并创建子进程,然后子进程会关闭从 fork 继承的 fd。

文件是否会在父级中保持打开状态,因为它们是独立的?标准 i/o 或 stderr 呢?

【问题讨论】:

    标签: linux file fork parent-child system-calls


    【解决方案1】:

    无论文件描述符代表文件还是设备,也无论它是否曾作为标准 i/o 描述符传递给任何进程:如果您在一个进程中关闭它,另一个进程仍然有一个有效的描述符。

    (这很自然。想象一下描述符将与另一个进程中的描述符相互依赖。然后,如果子进程意外崩溃,父进程甚至很难记录这个事实,一旦检测到崩溃。它无法通过任何先前打开的描述符记录这一事实,因为所有形式的进程退出都涉及关闭所有打开的描述符。因此,故障模式倾向于跨进程传播。此外,即使是常规的、无错误的 I/O通过这种假设的共享描述符的模式将在竞争条件下比比皆是。)

    【讨论】:

    • 如果他们是独立的,孩子如何阅读父母写的东西?
    • @Filipe - 它们是对同一文件或设备的独立打开和独立访问的描述符。或者到同一管道的一端或另一端,如果这是您的想法;但管道的特殊之处在于它们并不独立于它们的描述符而存在。
    • 可以说它像云中的文档一样工作吗?我的意思是,每个有权访问的人都可以编辑它(写),但如果有人关闭它,它仍然对其他人开放。
    • @Filipe - 是的,这很相似。但不是一个完美的类比。如果您有访问权限,这并不意味着您现在可以主动打开该文件。这只是意味着您可以在尝试打开它时打开它。分叉的进程就像现在打开文件的用户。
    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多