获取ios系统的进程列表(pid, names, paid, status)
2015-08-20 15:14
567 查看
// Get the list of processes and all information about them @try { // Make a new integer array holding all the kernel processes int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0}; // Make a new size of 4 size_t miblen = 4; size_t size = 0; int st = sysctl(mib, (int)miblen, NULL, &size, NULL, 0); // Set up the processes and new process struct struct kinfo_proc *process = NULL; struct kinfo_proc *newprocess = NULL; // do, while loop rnning through all the processes do { size += size / 10; newprocess = realloc(process, size); if (!newprocess) { if (process) free(process); // Error return nil; } process = newprocess; st = sysctl(mib, (int)miblen, process, &size, NULL, 0); } while (st == -1 && errno == ENOMEM); if (st == 0) { if (size % sizeof(struct kinfo_proc) == 0) { int nprocess = (int)(size / sizeof(struct kinfo_proc)); if (nprocess) { NSMutableArray *array = [[NSMutableArray alloc] init]; for (int i = nprocess - 1; i >= 0; i--) { NSString *processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid]; NSString *processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm]; NSString *processPriority = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_priority]; NSDate *processStartDate = [NSDate dateWithTimeIntervalSince1970:process[i].kp_proc.p_un.__p_starttime.tv_sec]; NSString *processParentID = [[NSString alloc] initWithFormat:@"%d", [self parentPIDForProcess:(int)process[i].kp_proc.p_pid]]; NSString *processStatus = [[NSString alloc] initWithFormat:@"%d", (int)process[i].kp_proc.p_stat]; NSString *processFlags = [[NSString alloc] initWithFormat:@"%d", (int)process[i].kp_proc.p_flag]; // Check to make sure all values are valid (if not, make them) if (processID == nil || processID.length <= 0) { // Invalid value processID = @"Unkown"; } if (processName == nil || processName.length <= 0) { // Invalid value processName = @"Unkown"; } if (processPriority == nil || processPriority.length <= 0) { // Invalid value processPriority = @"Unkown"; } if (processStartDate == nil) { // Invalid value processStartDate = [NSDate date]; } if (processParentID == nil || processParentID.length <= 0) { // Invalid value processParentID = @"Unkown"; } if (processStatus == nil || processStatus.length <= 0) { // Invalid value processStatus = @"Unkown"; } if (processFlags == nil || processFlags.length <= 0) { // Invalid value processFlags = @"Unkown"; } // Create an array of the objects NSArray *ItemArray = [NSArray arrayWithObjects:processID, processName, processPriority, processStartDate, processParentID, processStatus, processFlags, nil]; // Create an array of keys NSArray *KeyArray = [NSArray arrayWithObjects:@"PID", @"Name", @"Priority", @"StartDate", @"ParentID", @"Status", @"Flags", nil]; // Create the dictionary NSDictionary *dict = [[NSDictionary alloc] initWithObjects:ItemArray forKeys:KeyArray]; // Add the objects to the array [array addObject:dict]; } // Make sure the array is usable if (array.count <= 0) { // Error, nothing in array return nil; } // Free the process free(process); // Successful return array; } } } // Something failed return nil; } @catch (NSException * ex) { // Error return nil; }
相关文章推荐
- iOS开发——多线程篇——NSOperation(基于GCD多线程编程),下载图片并合成新图片
- IOS-企业开发者账号&邓白氏码申请记录
- iOS 访问粘贴板
- IOS发展--他们控制的定义
- iOS 获取WIFI,IP地址
- IOS NSNotificationCenter 的使用
- iOS开发-Autolayout小结
- iOS简单项目Demo-----贪吃蛇
- IOS开发页面间的传值 (代理和通知)
- 获取ios系统的电池电量比例,是否充电中,是否充满
- iOS 通知中心
- 获取ios系统的deviceModel, deviceName, systemName, systemVersion
- 如何获得ios系统持续运行时间
- ios客户端websocket的helloworld
- Quartz2d从易到难全解析---绘制圆弧、圆、图片和文字
- self和下划线的用法区别
- iOS页面跳转及数据传递
- IOS 用keychain(钥匙串)保存用户名和密码
- IOS屏幕旋转
- ios应用数据存储方式