运行 NSTask 同步
Run NSTask synchronously
我有一个 .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,等到执行结束?
似乎问题出在执行应用程序和 return 上下文的 open
命令中,即使执行尚未结束。
我发现 open
有一个 -W 参数:
-W, --wait-apps Blocks until the used applications are closed (even if they were already running).
添加这个参数解决了我的问题。
最终代码:
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];
我有一个 .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,等到执行结束?
似乎问题出在执行应用程序和 return 上下文的 open
命令中,即使执行尚未结束。
我发现 open
有一个 -W 参数:
-W, --wait-apps Blocks until the used applications are closed (even if they were already running).
添加这个参数解决了我的问题。 最终代码:
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];