Linux:如何在fork时将文件描述符标记为不可继承?

4
在调用fork()时,是否可以将特定文件描述符标记为不可继承或关闭它?

3个回答

10

不是的。在fork中,所有文件描述符都会被继承。但是,您可以使用fcntl(fd,F_SETFD,FD_CLOEXEC)将fd设置为在执行时关闭。


3
请注意,在Linux下使用 open 函数时,通过传递 O_CLOEXEC 标志可以避免使用 fcntl 函数。 - Damon
1
@Damon:或者任何符合POSIX 2008标准的系统(O_CLOEXEC已经在POSIX 2008中标准化)。 - R.. GitHub STOP HELPING ICE

0
如果你真的想要在fork之后关闭,可以尝试类似这样的方法:
static void fd_to_close;
static void closer()
{
    close(fd_to_close);
}

pthread_atfork(0, 0, closer);

通常情况下,关闭执行时是期望的行为。


0

不可能的。默认情况下,子进程会从父进程继承文件表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接