objective-c – 保持NSTask会话运行 – Cocoa

objective-c – 保持NSTask会话运行 – Cocoa,第1张

概述我在我的 Cocoa应用程序中运行一个简单的grep命令,如下所示: NSTask *task;task = [[NSTask alloc] init];[task setLaunchPath: @"/usr/bin/grep"];NSArray *arguments;arguments = [NSArray arrayWithObjects: @"foo", @"bar.txt", n 我在我的 Cocoa应用程序中运行一个简单的grep命令,如下所示:

NSTask *task;task = [[NSTask alloc] init];[task setLaunchPath: @"/usr/bin/grep"];NSArray *arguments;arguments = [NSArray arrayWithObjects: @"foo",@"bar.txt",nil];[task setArguments: arguments];NSPipe *pipe;pipe = [NSPipe pipe];[task setStandardOutput: pipe];NSfileHandle *file;file = [pipe fileHandleForReading];[task launch];NSData *data;data = [file readDataToEndOffile];Nsstring *string;string = [[Nsstring alloc] initWithData: data enCoding: NSUTF8StringEnCoding];NSLog (@"grep returned:\n%@",string);[string release];[task release];

但是,我有点好奇知道如何通过终端输入命令,这些命令不会给出输出并且不会立即执行,除非退出使用类似Control C的东西可以使用此技术运行.像运行java -jar server.jar之类的东西,它一直运行直到退出会话.如果在启动命令后会话未自动结束,我该如何做?

我是否只需要评论它释放NSTask的部分?任何建议都会很好!

解决方法 将NSTask与不立即退出的基础程序一起使用时:

>你不应该使用 – [NSfileHandle readDataToEndOffile],因为没有文件结束.相反,您应该使用 – [NSfileHandle readInBackgroundAndNotify]在后台读取该任务的标准输出管道,并在数据可用时通知;>只有当您确定任务不再运行时,才应使用 – [NSTask release].在这种情况下,在释放任务之前,您应该向标准输入发送导致底层程序退出的命令(例如,等同于control-d的字符),或者发送它-terminate或-interrupt.>除非您生成了一个辅助线程来处理该任务,否则不应使用-waitUntilExit.

总结

以上是内存溢出为你收集整理的objective-c – 保持NSTask会话运行 – Cocoa全部内容,希望文章能够帮你解决objective-c – 保持NSTask会话运行 – Cocoa所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1070476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存