簡體   English   中英

保持 NSTask Session 運行 - Cocoa

[英]Keep a NSTask Session Running - Cocoa

我在我的 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];

但是,我有點想知道如何通過終端輸入命令,這些命令不會發出 output 並且不會立即執行,除非使用Control + C之類的東西退出可以使用這種技術運行。 像運行java -jar server.jar這樣它會一直運行直到退出 session。 一旦命令啟動,session 不會自動結束,我該怎么做?

我只需要注釋掉它發布NSTask的部分嗎? 任何建議都會很好!

NSTask與不會立即退出的底層程序一起使用時:

  1. 你不應該使用-[NSFileHandle readDataToEndOfFile]因為沒有文件結尾。 相反,您應該使用-[NSFileHandle readInBackgroundAndNotify]在后台讀取該任務的標准 output pipe,並在數據可用時收到通知;

  2. 僅當您確定該任務不應再運行時,才應使用-[NSTask release] 在這種情況下,在發布任務之前,您應該向其標准輸入發送導致底層程序退出的命令(例如相當於control -d的字符),或者發送它-terminate-interrupt

  3. 除非您已生成輔助線程來處理該任務,否則您不應使用-waitUntilExit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM