我有一个.app文件,我正在通过NSTask运行,我希望线程被阻塞,直到.app执行结束。
我目前的代码是:
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并等待执行结束?
发布于 2020-07-20 07:20:03
看起来问题出在open命令中,它执行应用程序并返回上下文,即使执行还没有结束。
我发现open有一个-W参数:
-W,--等待--应用程序阻塞,直到使用的应用程序被关闭(即使它们已经在运行)。
加上这个论点解决了我的问题。最终代码:
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];https://stackoverflow.com/questions/62984072
复制相似问题