Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在cocoa应用程序中是否执行非流程工作?_Cocoa_Macos_Fork - Fatal编程技术网

在cocoa应用程序中是否执行非流程工作?

在cocoa应用程序中是否执行非流程工作?,cocoa,macos,fork,Cocoa,Macos,Fork,我有一个cocoa应用程序,需要在第二个进程中完成一些工作(因为它可能会由于错误库而崩溃)。我希望我的项目尽可能简单,因此理想情况下,我将使用与父进程相同的二进制文件,并使用命令行参数控制子进程。如果父进程可以获得新进程的stdin&stdout的句柄,这样它们就可以进行通信,那也很好(尽管我用pipe()创建的东西也可以)。以前有人解决过这个问题吗?你学到了什么?我来自Win32/Linux背景,所以我不确定Cocoa/OS X是否有我应该使用的特殊功能 我希望我的项目尽可能简单,因此理想情况

我有一个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]