我需要以编程方式获取OS X中特定进程/应用程序发送和接收的字节数。
有这样做的命令行“nettop”。我想在我的代码中启动它并将结果返回到缓冲区(例如NSString),然后解析它。
作为示例,我使用了以下主题代码: Execute a terminal command from a Cocoa app
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/usr/bin/nettop"];
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 (@"result returned:\n%@", string);
问题是它返回空字符串。如何解决以下问题?
P.S。如果您知道/有示例代码如何获取每个进程的接收和发送字节数,请提供。
答案 0 :(得分:2)
Error opening terminal: unknown.
此消息已打印,因为您尝试以交互模式运行nettop
。
但看起来nettop
不支持非交互模式。因为使用top
,一切都运行得很好,使用了以下设置:
[task setLaunchPath: @"/usr/bin/nettop"];
[task setArguments:@[@"-l1"]];
根据Google -l1
以非交互模式运行它。使用top
一切运行正常,但使用nettop
它无法正常工作。