首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步运行NSTask

同步运行NSTask
EN

Stack Overflow用户
提问于 2020-07-19 18:21:11
回答 1查看 165关注 0票数 0

我有一个.app文件,我正在通过NSTask运行,我希望线程被阻塞,直到.app执行结束。

我目前的代码是:

代码语言:javascript
复制
NSTask *task = [[NSTask alloc] init];
task.launchPath = @"/bin/bash";
task.arguments = [NSArray arrayWithObjects:@"-c", "/usr/bin/open myApp.app", nil];
[task launch];
[task waitUntilExit]; // doesn't guarantee task will wait until exit according to docs

我知道我可以使用NSTask.terminationHandler,但是由于我有很多任务,所以我不想陷入回调的困境(而且我也不在乎一切是否会运行同步,并且需要一些时间)。

(我还尝试将nohup添加到执行命令中,但它没有产生我想要的效果。)

是否有一种方法可以同步执行NSTask并等待执行结束?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-20 07:20:03

看起来问题出在open命令中,它执行应用程序并返回上下文,即使执行还没有结束。

我发现open有一个-W参数:

-W,--等待--应用程序阻塞,直到使用的应用程序被关闭(即使它们已经在运行)。

加上这个论点解决了我的问题。最终代码:

代码语言:javascript
复制
NSTask *task = [[NSTask alloc] init];
task.launchPath = @"/bin/bash";
task.arguments = [NSArray arrayWithObjects:@"-c", "/usr/bin/open -W myApp.app", nil];
[task launch];
[task waitUntilExit];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62984072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档