iOS 获取正在运行的进程

转载原址: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
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值