iOS 获取正在运行的进程
2016-04-09 17:53
696 查看
转载原址:http://www.jianshu.com/p/ec27662c1557
代码如下:
如何使用呢?
以上代码在iOS8一下可以使用,在iOS9上加强了安全,不允许调用sysctl获取进程了。但是我觉得没有关系的,并发妨碍你做这件事 在非越狱的iPhone 6 (iOS 8.1.3) 上进行钓鱼攻击 (盗取App Store密码),可通过检查系统版本完成钓鱼。
著作权归作者所有
文/IamOnelong(简书作者)
原文链接:http://www.jianshu.com/p/ec27662c1557
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
代码如下:
// .h @interfaceUIDevice (ProcessesAdditions) - (NSArray*)runningProcesses; @end
// .m #import"UIDevice+ProcessesAdditions.h" @implementationUIDevice (ProcessesAdditions) - (NSArray*)runningProcesses { <span style="white-space:pre"> </span>intmib[4] = {CTL_KERN,KERN_PROC,KERN_PROC_ALL, 0}; <span style="white-space:pre"> </span>intmiblen = 4; <span style="white-space:pre"> </span>size_tsize; <span style="white-space:pre"> </span>intst =sysctl(mib, miblen,NULL, &size,NULL, 0); <span style="white-space:pre"> </span>structkinfo_proc* process =NULL; <span style="white-space:pre"> </span>structkinfo_proc* newprocess =NULL; <span style="white-space:pre"> </span>do{ <span style="white-space:pre"> </span>size += size / 10; <span style="white-space:pre"> </span>newprocess =realloc(process, size); <span style="white-space:pre"> </span>if(!newprocess){ <span style="white-space:pre"> </span>if(process){ <span style="white-space:pre"> </span>free(process); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>return nil; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>process = newprocess; <span style="white-space:pre"> </span>st =sysctl(mib, miblen, process, &size,NULL, 0); <span style="white-space:pre"> </span>}while(st == -1 &&errno==ENOMEM); <span style="white-space:pre"> </span>if(st == 0){ <span style="white-space:pre"> </span>if(size %sizeof(structkinfo_proc) == 0){ <span style="white-space:pre"> </span>longnprocess = size/sizeof(structkinfo_proc); <span style="white-space:pre"> </span>if(nprocess){ <span style="white-space:pre"> </span>NSMutableArray* array = [[NSMutableArrayalloc]init]; <span style="white-space:pre"> </span>for(longi = nprocess - 1; i >= 0; i--){ <span style="white-space:pre"> </span>NSString* processID = [[NSStringalloc]initWithFormat:@"%d", process[i].kp_proc.p_pid]; <span style="white-space:pre"> </span>NSString* processName = [[NSStringalloc]initWithFormat:@"%s", process[i].kp_proc.p_comm]; <span style="white-space:pre"> </span>NSDictionary* dict = [[NSDictionaryalloc]initWithObjects:[NSArrayarrayWithObjects:processID, processName,nil] forKeys:[NSArrayarrayWithObjects:@"ProcessID",@"ProcessName",nil]]; <span style="white-space:pre"> </span>[processIDrelease]; <span style="white-space:pre"> </span>[processNamerelease]; <span style="white-space:pre"> </span>[arrayaddObject:dict]; <span style="white-space:pre"> </span>[dictrelease]; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>free(process); <span style="white-space:pre"> </span>return [arrayautorelease]; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>return nil; } @end
如何使用呢?
NSArray* processes = [[UIDevice currentDevice] runningProcesses]; for(NSDictionary* dictinprocesses){ NSLog(@"%@ - %@", [dictobjectForKey:@"ProcessID"], [dictobjectForKey:@"ProcessName"]); }
以上代码在iOS8一下可以使用,在iOS9上加强了安全,不允许调用sysctl获取进程了。但是我觉得没有关系的,并发妨碍你做这件事 在非越狱的iPhone 6 (iOS 8.1.3) 上进行钓鱼攻击 (盗取App Store密码),可通过检查系统版本完成钓鱼。
著作权归作者所有
文/IamOnelong(简书作者)
原文链接:http://www.jianshu.com/p/ec27662c1557
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关文章推荐
- 苹果iOS手机暗藏间谍软件的揭秘者:扎徳尔斯基
- iOS获取相册/相机图片-------自定义获取图片小控件
- CALayer核心动画
- iOS - + initialize 与 +load
- block问题
- iOS简单排序--字母排序、NSDictionary排序
- iOS 远程推送原理及实现
- ios启动页命名规则
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS开发--即时通讯
- iOS中状态栏的小结
- iOS消息推送的工作机制
- iOS开发之collectionView实现无限轮播视图
- iOS 使用NTP时间同步服务
- iOS开发常用传值方式总结
- [置顶] iOS开发参考
- Coredata — 入门使用
- CoreData
- iOS 获取视频某一帧图像
- iOS体验中的左右侧滑的体验