Mac 上的 Python:全局设置 OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES 是否安全?

YFl*_*YFl 4 python macos multiprocessing

一些 python 进程崩溃:

objc[51435]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.
Run Code Online (Sandbox Code Playgroud)

这些是使用子 shell、分叉线程等的进程。MacOS 出于某些安全原因阻止它们(我不确定是什么,但人们就是这么说的

解决方案是禁用此安全检查

export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
Run Code Online (Sandbox Code Playgroud)

这对于已知的库和依赖项以及当前运行的 shell 来说是很好的。

将其设置为全局环境变量,在我的本地 mac 计算机中全局禁用此检查是否安全?

小智 5

fork()Apple 改变了High Sierra (>= 10.13) 中的行为方式。

如果启用,该OBJC_DISABLE_INITIALIZE_FORK_SAFETY变量会关闭较新的 ObjectiveC 框架默认强制执行的立即崩溃行为,作为此更改的一部分。

您的问题“将其设置为全局环境变量是否安全”取决于您在这种情况下对“安全”的定义。

从某种意义上说,它是安全的,您的计算机不会起火。

从某种意义上说,它是不安全的,它可能会掩盖崩溃信息,否则这些信息将由出现问题的应用程序呈现,并且可能允许叉子炸弹类型的进程使您的计算机崩溃。

因此,如果您只有一个严格需要设置标志的用例,那么最好将其设置本地化为该脚本/场景。

  • 这是一个出色的答案。让我更清楚地了解这个问题。谢谢。 (2认同)