我使用 NSTask 来运行我的助手应用程序。在 99% 的我的客户系统上,这工作正常,但有两个回复我告诉我它没有。其中一个非常好,让我可以查看每个远程桌面的问题。
我为 StandardOutput/StandardError 尝试了很多不同的 NSPipe/NSFileHandle 组合,以确保问题与填充这些缓冲区无关。示例 1 和 2 。我的猜测是它不相关,因为它在这么多系统上都可以正常工作,而且 _dyld_start 在应用程序生命周期中还为时过早,无法填充 StandardOutput/StandardError。
关于该问题的其他说明:
来自事件监视器的流程示例的屏幕截图:
欢迎提供任何线索或调试提示,以找出帮助程序卡在 _dyld_start 中的原因!
最佳答案
由于没有人回答,我抛出一些想法。也许其中一个是答案——只是猜测——但由于欢迎提供线索和提示,你可以看看:
如果我没记错的话, NSTask 会调用
posix_spawn(2)
。这可能是一个线索,因为使用 fork(2)
和 execv(3)
似乎有效,您可以关注 NSTask
和非阻塞替代方案之间的差异。显然,一开始就发生了一些事情,阻止了 child 正确执行。任何,这将意味着一个错误,你将无法
无论如何要恢复。但它仍然会提供有值(value)的线索)。
sysdiagnose_timestamp_.tar.gz
的文件。请让他们邮寄给您。我的是大约 5 MB。有关 sysdiagnose man page 的更多详细信息。 关于objective-c - NSTask 子进程卡在 _dyld_start,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15323886/