适用于Mac OS X open Command或等效程序的C标头
C header for Mac OS X open Command or equivalent
我已经读过了:
- 如何获取在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将自动管理可可原料。
相关文章:
- 如何从C++程序内部找到 STL 标头?
- Visual Studio中使用Qt外接程序为moc_*预编译的标头
- 标头包含不是 .c 程序所必需的,而是.cpp程序需要的
- 当我在C 程序中加入RINSIDE标头时,如何使链接器工作
- 使用算法标头时,同一程序不会在 Windows 上编译
- Visual Studio 中的 Hello World C++ 应用程序 - 关于预编译标头不同的问题
- 无法弄清楚如何让 CMake 为自定义 clang 驱动程序拉入正确的标头
- C 链接器错误尝试包含Tiny OBJ加载程序标头文件
- 如何在用户修改后使用旧版驱动程序中的 PE 标头获取原始文件类型
- 何时在<string>程序中包含标头?
- 程序运行时包括标头文件
- 我的C程序如何可以从C 文件调用函数,而无需包括标头
- 帮助程序函数应该放在标头中还是在实现文件中
- 如果在另一个库和链接到此库的应用程序中都使用了仅标头的库,是否存在任何问题
- 适用于Mac OS X open Command或等效程序的C标头
- 正在比较标头记录值和读取程序崩溃的行数.C++
- 在运行时从应用程序获取PE标头时发生运行时错误
- 在标头不存在的计算机上运行已编译的 C 程序
- 无法在 1.1 版本中使用 1.2 标头编译 OpenCL 应用程序
- 仅标头C++应用程序有什么问题?