在cocoa应用程序中是否执行非流程工作?
我有一个cocoa应用程序,需要在第二个进程中完成一些工作(因为它可能会由于错误库而崩溃)。我希望我的项目尽可能简单,因此理想情况下,我将使用与父进程相同的二进制文件,并使用命令行参数控制子进程。如果父进程可以获得新进程的stdin&stdout的句柄,这样它们就可以进行通信,那也很好(尽管我用pipe()创建的东西也可以)。以前有人解决过这个问题吗?你学到了什么?我来自Win32/Linux背景,所以我不确定Cocoa/OS X是否有我应该使用的特殊功能 我希望我的项目尽可能简单,因此理想情况下,我将使用与父进程相同的二进制文件,并使用命令行参数控制子进程在cocoa应用程序中是否执行非流程工作?,cocoa,macos,fork,Cocoa,Macos,Fork,我有一个cocoa应用程序,需要在第二个进程中完成一些工作(因为它可能会由于错误库而崩溃)。我希望我的项目尽可能简单,因此理想情况下,我将使用与父进程相同的二进制文件,并使用命令行参数控制子进程。如果父进程可以获得新进程的stdin&stdout的句柄,这样它们就可以进行通信,那也很好(尽管我用pipe()创建的东西也可以)。以前有人解决过这个问题吗?你学到了什么?我来自Win32/Linux背景,所以我不确定Cocoa/OS X是否有我应该使用的特殊功能 我希望我的项目尽可能简单,因此理想情况
< Foo> <代码>和<代码> Exc> <代码>在Linux和其他POSIX环境下,在Mac OS X上的工作是一样的,有一点是:在COCOA应用程序中,你不能只是<代码> For < /C> >而不是<代码> Exc> <代码>,因为核心基础不允许你在新的进程中使用任何基于CF或COCOA的API。如果你在Cocoa应用程序中使用
fork
,那么你必须立即执行exec
通过在传递给exec
的argv
的[0]
中使用自己的argv[0]
可以exec
相同的二进制文件
有一个可可版本的fork
+exec
:创建一个NSTask并将其启动路径设置为您自己的[[NSProcessInfo processInfo]参数]objectAtIndex:0]
。由于上述原因,无法使用NSTask执行fork
和exec
如果父进程可以获得新进程的stdin&stdout的句柄,这样它们就可以进行通信,那也很好(尽管我用pipe()创建的东西也可以)
管道
也可以像您预期的那样工作
如果使用NSTask,则管道的Cocoa版本是[NSPipe-pipe]