Ich versuche, ein einfaches Bash-Skript mit NSTask auszuführen und die Ausgabe in eine Textansicht zu leiten. Sobald die Aufgabe ausgeführt wird, ist die CPU-Auslastung meiner App 100%, obwohl es eine einfache echo
(für jetzt) ist.Verwendung von NSTask und NSPipe verursacht 100% CPU-Auslastung
ich ein völlig neues Projekt erstellt, das Problem zu isolieren:
@interface AppDelegate()
@property (nonatomic) NSTask *task;
@property (nonatomic) NSPipe *pipe;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
self.pipe = [NSPipe pipe];
self.pipe.fileHandleForReading.readabilityHandler = ^(NSFileHandle *h) {
NSLog(@"Read: %@", [h readDataToEndOfFile]);
};
self.task = [[NSTask alloc] init];
self.task.launchPath = @"/bin/bash";
self.task.arguments = @[@"-c", @"echo test"];
self.task.standardOutput = self.pipe;
[self.task launch];
}
@end
Es korrekt ausgeführt wird und die Ausgabe (als NSData
) mit NSLog
protokolliert:
PipeTest[3933:2623] Read: <74657374 0a>
jedoch die CPU-Auslastung bleibt bei 100%, bis ich meine App beende.
EDIT:
A Time Profiler-Test gibt die Liste unten, aber ich bin nicht sicher, wie dies zu interpretieren.
Das ist großartig, danke! Kannst du auch erklären, warum * die CPU so auf offene Dateigriffe reagiert? –