का कारण बनता है मैं एनएसटीस्क का उपयोग करके एक साधारण बैश स्क्रिप्ट चलाने की कोशिश कर रहा हूं और आउटपुट को टेक्स्ट व्यू पर निर्देशित करता हूं। एक बार कार्य निष्पादित हो जाने के बाद, मेरे ऐप का सीपीयू उपयोग 100% है, भले ही यह एक साधारण echo
(अभी के लिए) है।एनएसटीस्क और एनएसपीआईपी का उपयोग 100% सीपीयू उपयोग
@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% पर रहता है।
संपादित करें:
ए टाइम प्रोफाइलर परीक्षण नीचे दी गई सूची देता है, लेकिन मुझे यकीन है कि यह कैसे व्याख्या करने के लिए नहीं कर रहा हूँ।
यह बहुत अच्छा है, धन्यवाद! क्या आप यह भी समझा सकते हैं कि * सीपीयू इस तरह प्रतिक्रिया करता है कि खुले फ़ाइल हैंडल को छोड़ दिया जाए? –