我在我的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
来完成这个任务。相反,应该使用Launchd
,因为它允许服务器任务在应用程序外部进行维护,并且通常是专门设计来满足所描述的需求的。但如果你确实想使用NSTask
,那么 Bavarious 的答案完全正确。 - bbum