用于Mac OS X的C头打开Command或等效命令

时间:2016-04-12 17:33:02

标签: c++ c macos

我已经读过这些:

我试图从open命令中获取PID。我们有一个内部多平台C ++库,例如(过度简化):

pid = launch(char* command) 
// Many other parameters and variations (sync/async,timeout,stdout,stderr,stdin )

但是在OS X上,库用户经常使用命令:

Open myExe myArgs -F

似乎:

  • 无法阻止open命令分离子进程。 (超时时杀死的问题)
  • 没有办法让孩子回来

我对任何解决方案都非常开放:

  • open命令是否有c头? " man open"只提供shell命令和打开的"文件" c功能。也许这个功能会给我更多的控制权
  • 有没有办法模拟"调用execve时用c ++打开的行为?我的意思是清理缓存并将应用程序置于前台(-F和 -g)
  • ...

1 个答案:

答案 0 :(得分:0)

回过头来写我的解决方案答案,我不喜欢它,因为我需要使用一些可可的东西,但它有效......

我已经获得了所需的“前景”行为并使用以下代码获得了Pid:

NSString * arg1 = @"--my_arg";
NSString * arg2 = @"arg_value";
NSArray  * myArray2 = [NSArray arrayWithObjects:arg1,arg2,nil];

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:myArray2 forKey:NSWorkspaceLaunchConfigurationArguments];

bURL = [NSURL fileURLWithPath:@"/path/to/appli.app"];
NSRunningApplication * inst = [ws launchApplicationAtURL:bURL options:NSWorkspaceLaunchNewInstance configuration:dict error:nil];
pid_t pid = [inst processIdentifier];

在Xcode中,您可以在我的file.mm中使用上面的代码,其签名在我的file.h中声明。 Xcode将自动管理可可物。