适用于Mac OS X open Command或等效程序的C标头

C header for Mac OS X open Command or equivalent

本文关键字:程序 标头 OS Mac open Command 适用于      更新时间:2023-10-16

我已经读过了:

  • 如何获取在OSX上使用"打开"命令启动的应用程序的进程id(PID)
  • https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/open.1.html

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

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

然而,在OSX上,库用户经常使用以下命令:

Open myExe myArgs -F

看起来:

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

我对任何解决方案都持开放态度:

  • open命令有c头吗?"man-open"只提供shell命令和open"file"c函数。也许这个功能会给我更多的控制
  • 在调用execve时,有没有一种方法可以"模拟"c++中open的行为?我的意思是清理缓存并将应用程序放在前台(-F和而不是-g)

回来写我的解决方法答案时,我不喜欢它,因为我确实需要使用一些可可粉,但它有效。。。

我已经获得了想要的"前景"行为,并用以下代码获得了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中使用上面的代码,其签名在我的文件.h中声明。Xcode将自动管理可可原料。