Macos 在Mac OS X上,我可以在fork之后调用chdir或setenv吗?

Macos 在Mac OS X上,我可以在fork之后调用chdir或setenv吗?,macos,fork,bsd,setenv,chdir,Macos,Fork,Bsd,Setenv,Chdir,在OS X上,fork的手册页显示: 在子进程中可以做的事情是有限的。为了完全安全,您应该限制自己只执行异步信号安全操作,直到调用某个exec函数为止。任何框架或库中的所有API(包括全局数据符号)在fork()之后都应该被认为是不安全的,除非明确说明是安全的或异步信号安全的。如果需要在子流程中使用这些框架,则必须执行。在这种情况下,执行自己是合理的 根据手册页的页脚,这可能已经存在很长时间了: 第四次伯克利发行1993年6月4日第四次伯克利发行 我原以为chdir(2)在fork()和exec

在OS X上,fork的手册页显示:

在子进程中可以做的事情是有限的。为了完全安全,您应该限制自己只执行异步信号安全操作,直到调用某个exec函数为止。任何框架或库中的所有API(包括全局数据符号)在fork()之后都应该被认为是不安全的,除非明确说明是安全的或异步信号安全的。如果需要在子流程中使用这些框架,则必须执行。在这种情况下,执行自己是合理的

根据手册页的页脚,这可能已经存在很长时间了:

第四次伯克利发行1993年6月4日第四次伯克利发行

我原以为chdir(2)在fork()和exec()之间调用是安全的,但它的手册页并没有说它对异步调用是安全的。事实上,这是不安全的吗?如果是这样,我真的需要在fork()之前更改目录吗?对我来说似乎不合理


setenv(3)也是如此。考虑到它调用malloc(),我想这可能不安全。但是没有等效的execvp允许我通过一个环境。具体来说,execvp搜索路径。最接近的等价物,可以找到一个环境ARG,ExpEvE(),不搜索路径。< /P> < P>您引用的第一个文本块(“有限制…”)是专门为Mac OS X添加的——它试图指出苹果的大多数库和框架(AppKIT、Co、Buffic等)。使用
fork()
后将无法正常工作


据我所知,所有标准C库函数,包括
chdir()
fork()

之后都可以安全地使用。您引用的第一个文本块(“有限制…”)是专门为Mac OS X添加的,它试图指出苹果的大多数库和框架(AppKIT、碳、基础等)在<代码> Frk()/< > > /P>之后将无法正常工作。
据我所知,所有标准的C库函数,包括
chdir()
fork()之后都可以安全地使用
fork()

是的,在
fork()之后除了CF调用之外,几乎什么都可以使用
-这就是许多服务器/守护程序实现的工作方式。@Dashwuff至少有一些C库函数在fork之后不安全。是的,在
fork()之后,除了CF调用之外,几乎任何东西都是允许的。
-这就是许多服务器/守护程序实现的工作方式。@Dashwuff至少有一些C库函数在fork之后不安全。