如何使用fork()和exec()在Mac OS上创建进程

我正在研究一个相对简单,独立的“ 流程启动器 ”,我希望能够在Windows(XP,Vista,7),Linux(Ubuntu 10.10)以及特别是Mac OS X (10.6)上工作。 Linux和Windows基本上都可以工作,但我在使用Mac版时遇到了一些麻烦。 我希望fork()exec()函数在Mac OS下可以像在Linux中一样工作。 所以我的第一个问题是:

  1. 我应该使用它们在Mac上创建进程还是要使用任何特定于平台的function?

我目前的代码(在Linux下工作正常)来调试它看起来像这样:

 pid_t processId = 0; if (processId = fork()) == 0) { const char * tmpApplication = "/Path/to/TestApplication"; int argc = 1; char * argv[argc + 1]; argv[0] = tmpApplication; argv[1] = NULL; execv(tmpApplication, argv); }else { //[...] } 

不知道这是否可以在Mac OS X下运行,因为我的子进程根本没有启动,而没有出现错误。

谢谢!

以下程序改编自您的代码,在OS X下对我来说效果很好:

 #include  #include  #include  #include  int main (void) { pid_t processId; if ((processId = fork()) == 0) { char app[] = "/bin/echo"; char * const argv[] = { app, "success", NULL }; if (execv(app, argv) < 0) { perror("execv error"); } } else if (processId < 0) { perror("fork error"); } else { return EXIT_SUCCESS; } return EXIT_FAILURE; } 

我建议你从这个简单的片段开始,如果有效,请继续添加内容,直到找到使其中断的内容。

TestApplication是实际的可执行文件还是应用程序包(.app)? 您只能使用execv()等函数启动实际的可执行文件。 通常,应用程序包中的可执行文件可以在ApplicationName.app/Contents/MacOS/ApplicationName找到。