我試圖運行一個簡單的bash腳本使用NSTask並將輸出指向文本視圖。一旦執行任務,我的應用程序的CPU使用率爲100%,儘管這是一個簡單的echo
(現在)。使用NSTask和NSPipe導致100%的CPU使用率
我創建了一個完全新的項目來隔離問題:
@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
它是正確執行和輸出(作爲NSData
),同時記錄NSLog
:
PipeTest[3933:2623] Read: <74657374 0a>
然而CPU使用率保持在100%,直到我終止我的應用程序。
編輯:
時間探查測試返回下面的列表中,但我不知道如何解釋這一點。
這太棒了,謝謝!你還可以解釋*爲什麼CPU會如此反應以打開文件句柄? –