参考连接: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)