代码之家  ›  专栏  ›  技术社区  ›  twk Mark Adler

在Cocoa应用程序中工作是否不正常?

  •  1
  • twk Mark Adler  · 技术社区  · 14 年前

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

    1 回复  |  直到 14 年前
        1
  •  3
  •   Peter Hosey    14 年前

    我希望我的项目尽可能简单,所以理想情况下,我将使用与父进程相同的二进制文件,并且只使用命令行参数控制子进程。

    fork exec 与Linux和其他POSIX环境一样,在Mac OS X上也可以这样做,但有一个要点:在Cocoa应用程序中,您不能 而不是 执行程序 ,因为核心基础不允许你在新的过程中使用任何基于CF或可可的API。如果你 在可可应用程序中,您必须 执行程序 很快之后。

    你可以 执行程序 使用您自己的二进制文件 argv[0] [0] argv 你传递给 执行程序 .

    有可可版本的 + 执行程序 :创建一个nstask并将其启动路径设置为您自己的 [[[NSProcessInfo processInfo] arguments] objectAtIndex:0] . 没有办法 而不是 执行程序 因为上面的原因,使用了nstask。

    如果父进程能够得到新进程的stdin&stdout的句柄,以便它们可以通信(尽管我用pipe()创建的一些东西也可以工作),那么这也是一件好事。

    pipe 也可以像你期望的那样工作。

    如果你使用的是NSTASK,可可版本的 [NSPipe pipe] .