Geo*_*nov 9 c c++ macos fork exec
我的问题很简单.在Linux上,使用fork而不使用exec非常流行
但是,我发现在MacOS上这是不可能的(参见fork手册)
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/fork.2.html
您在子进程中可以做的事情是有限的.为了完全安全,你应该自己限制自己只执行异步信号安全操作,直到调用其中一个exec函数为止.除非明确记录为安全或异步信号安全,否则在fork()之后,应假定任何框架或库中的所有API(包括全局数据符号)都是不安全的.如果您需要在子进程中使用这些框架,则必须执行.在这种情况下,执行自己是合理的.
这对我来说很奇怪?是什么原因?有可能解决它吗?
在OS X中使用fork是可以的,在与Linux一起使用fork的相同限制下.Linux 有类似的警告.
如果您正在构建一个单线程的应用程序并依赖于核心UNIX API和设计理念,那么您应该没问题.如果要链接到其他库,则应该非常熟悉它们的行为.想象一下,链接到一个启动后台线程的库 - 在分叉之后,你将处于一个潜在的未定义状态,只给出了一个名为fork的线程.
OS X提供了一些很棒的功能,可以利用多核,例如可能值得考虑的Grand Central Dispatch.
我建议你阅读Mike Ash关于OS X下叉安全性的这篇文章.
| 归档时间: |
|
| 查看次数: |
2031 次 |
| 最近记录: |