參考連接:html
http://www.javashuo.com/article/p-orswuzsc-ew.htmllinux
https://segmentfault.com/q/1010000009396800objective-c
NSProcessInfo能夠得到當前進程的信息。得到全部活動進程信息能夠嘗試使用下面的方法。macos
進程的信息能夠經過ps命令獲得也能夠經過sysctl方法獲得。 可是我老是不能獲取進程的流量信息,關於這一點很糾結,如今的想法就是若是可以獲取進程的網絡端口,而後對端口進行監聽,統計其流量,可是如何可以獲取進程的網絡端口? 在linux中能夠經過netstat命令來查詢進程和其對應的端口,可是在macos中netstat命令和linux中不一樣,並不能實現這一功能(我沒找到,希望是可以的)。 因爲本人學習objective-c不久,不知道是否有這樣的api,若是你有什麼好的方法能夠和我聯繫。 如下是兩種方法的代碼:segmentfault
- (void)processListWithPS
{
_procList = [[NSMutableArray alloc] init];
FILE *fp = popen("ps -eo start,user,pid,pcpu,vsz,rss,etime,utime,stime,msgsnd,msgrcv", "r");
if (fp)
{
char line[4096] = {0};
int row = 0;
while (line == fgets(line, 4096, fp))
{
row++;
if (row > 1)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
char start[20]; //進程開始時間
char user[50]; //擁有進程用戶名
char pid[10]; //進程id
char cpu[10]; //進程佔用cpu率
char vsz[10]; //vss,虛擬內存
char rss[10]; //rss,物理內存
char etime[20]; //進程持續時間
char utime[20]; //用戶佔用進程時間
char stime[20]; //系統佔用進程時間
sscanf(line, "%s %s %s %s %s %s %s %s %s",
start, user, pid, cpu, vsz, rss, etime, utime, stime);
NSString *procStart = [NSString stringWithFormat:@"%s", start];
NSString *procUser = [NSString stringWithFormat:@"%s", user];
NSString *procPid = [NSString stringWithFormat:@"%s", pid];
NSString *procCpu = [NSString stringWithFormat:@"%s", cpu];
NSString *procVss = [NSString stringWithFormat:@"%s", vsz];
NSString *procRss = [NSString stringWithFormat:@"%s", rss];
NSString *procETime = [NSString stringWithFormat:@"%s", etime];
NSString *procUtime = [NSString stringWithFormat:@"%s", utime];
NSString *procStime = [NSString stringWithFormat:@"%s", stime];
ProcessInfo *proc = [[ProcessInfo alloc] init];
proc.startTime = procStart;
proc.user = procUser;
proc.procID = procPid;
proc.cpuRate = [procCpu floatValue];
proc.vss = [procVss integerValue];
proc.rss = [procRss integerValue];
proc.usedTime = procETime;
proc.utime = procUtime;
proc.stime = procStime;
proc.upFlow = [procMsgsnd integerValue];
proc.downFlow = [procMsgrcv integerValue];
[_procList addObject:proc];
[pool release];
}
}
pclose(fp);
}
}api
//返回全部正在運行的進程的 id,name,佔用cpu,運行時間 //使用函數int sysctl(int *, u_int, void *, size_t *, void *, size_t)