【问题标题】:linux's fork and system resources [duplicate]linux的fork和系统资源[重复]
【发布时间】:2012-06-26 05:30:50
【问题描述】:

可能重复:
Are file descriptors shared when fork()ing?

假设我在 linux 中有以下代码:

int main()
{
   FILE* f = fopen("file.txt", "w");
   fork();
   fwrite("A", 1, 1, f);
   fclose(f);
   return 0;
}

我从文档中对fork 的了解是,它会复制当前进程。它也复制内存的状态,因此 *f 在两种情况下都应该相等。但是系统资源会发生什么,例如文件句柄?在此示例中,我以写入意图打开文件,因此只有一个实例可以写入文件,对吗?哪些实例实际上会写入文件?谁应该更关心文件句柄并调用 fclose() ?

【问题讨论】:

    标签: linux resources fork


    【解决方案1】:

    两个进程都有一个句柄。两者都可以写入,但将共享当前偏移量。两者都应该关闭,每个都关闭自己的句柄。

    【讨论】:

    • unbeli,我是否正确,如果在 fork() 之后调用 exec() (例如在子进程中),那么子进程中的所有共享资源将被正确关闭,就好像应用程序刚刚终止了吗?
    • @DmitryBespalov 好吧,它们不会在 exec() 上关闭(除非您设置 FD_CLOEXEC),但是当孩子终止时它们会被关闭,当然。但这不会影响父级的句柄,它们将保持打开状态,直到您关闭它们或父级终止。
    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 2015-12-22
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    相关资源
    最近更新 更多