我使用NSTask来运行我的助手应用程序。在 99% 的一个我的客户系统上,这工作正常,但有两个回复我,让我知道它没有。其中一个很好,可以让我查看每个远程桌面的问题。
我为 StandardOutput/StandardError 尝试了很多不同的NSPipe/NSFileHandle组合,以确保问题与填充这些缓冲区无关。示例1和2。我的猜测是它不相关,因为它在很多系统上都可以正常工作,并且 _dyld_start 在应用程序生命周期中太早而无法填充 StandardOutput/StandardError。
关于该问题的其他说明:
- 从终端启动帮助应用程序工作正常。
- 在卡住的进程上附加和分离 gdb 并且事后价值它工作正常,当它完成时NSTask在-waitUntilExit之后开始工作。
- 使用fork(2)和execv(3)而不是NSTask能够很好地启动和运行帮助程序。
- 父进程是沙盒的,但我认为以前的报告在 Mac OS X 10.6/10.7 上是非沙盒的。
来自活动监视器的流程示例的屏幕截图:
欢迎提供任何线索或调试提示来找出帮助程序卡在 _dyld_start 中的原因!