【问题标题】:Why is it prohibited to use fork without exec in mac?为什么禁止在mac中使用不带exec的fork?
【发布时间】:2013-09-22 04:16:59
【问题描述】:

我的问题很简单。 在 Linux 上,不带 exec 使用 fork 非常流行

但是,我发现在 MacOS 上这是不可能的(参见 fork 手册)

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/fork.2.html

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

这对我来说似乎很奇怪?是什么原因?有办法解决吗?

【问题讨论】:

    标签: c++ c macos fork exec


    【解决方案1】:

    在 OS X 中使用 fork 是可以的,与在 Linux 中使用 fork 的限制相同。 Linuxhas similar caveats

    如果您正在构建一个单线程应用程序并且依赖于核心 UNIX API 和设计理念,那么您应该没问题。如果您要链接到其他库,您应该非常熟悉它们的行为。想象一下链接到一个启动后台线程的库——在 fork 之后,您可能处于未定义状态,因为只有调用 fork 的线程被克隆。

    OS X 为利用多核提供了一些很棒的功能,例如 Grand Central Dispatch,可能值得考虑。

    我建议您阅读 Mike Ash 撰写的this article,了解 OS X 下的分叉安全性。

    【讨论】:

      猜你喜欢
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 2011-07-02
      • 2011-07-22
      • 2011-05-18
      • 2021-11-13
      相关资源
      最近更新 更多