Chr*_*ris 9 c macos fork process exec
我正在研究一个相对简单,独立的" 流程启动器 ",我希望能够在Windows(XP,Vista,7),Linux(Ubuntu 10.10)以及Mac OS X(10.6)上工作.Linux和Windows基本上都可以工作,但我在使用Mac版时遇到了一些麻烦.我希望fork()和exec()功能将工作在Mac OS同样的方式,因为他们在Linux下工作.所以我的第一个问题是:
我当前的代码(在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
{
//[...]
}
Run Code Online (Sandbox Code Playgroud)
不知道这是否可以在Mac OS X下运行,因为我的子进程根本没有启动,而没有出现错误.
谢谢!
Ark*_*kku 12
以下程序改编自您的代码,在OS X下对我来说效果很好:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
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;
}
Run Code Online (Sandbox Code Playgroud)
我建议你从这个简单的片段开始,如果它工作,继续添加东西,直到找到使它破坏的东西.
是TestApplication实际的可执行文件,还是应用程序包(.app)?您只能使用像这样的函数启动实际的可执行文件execv().通常可以在应用程序包中找到可执行文件ApplicationName.app/Contents/MacOS/ApplicationName.