检测哪些应用程序正在使用的sysctl运行iOS版(Detect which app is curr

2019-06-27 23:42发布

我目前已经实现了一个简单的活动监控器上观看的iOS所有运行的进程。

要检索所有正在运行的进程的列表,我这样做:

size_t size;
struct kinfo_proc *procs = NULL;
int status;
NSMutableArray *killedProcesses = [[NSMutableArray alloc] init];

int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 };

status  = sysctl(mib, 4, NULL, &size, NULL, 0);
procs   = malloc(size);
status  = sysctl(mib, 4, procs, &size, NULL, 0);

// now, we have a nice list of processes

如果我想了解一个特定进程的详细信息,我会做:

struct kinfo_proc *proc;
int mib[5] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pidNum, 0 };
int count;
size_t size = 0;

// ask the proc size
if(sysctl(mib, 4, NULL, &size, NULL, 0) < 0) return -1;

// allocate memory for proc
proc = (struct kinfo_proc *)malloc(size);

sysctl(mib, 4, proc, &size, NULL, 0);

所有的额外PROC信息,我想现在存储在PROC。

我注意到,应用程序不会被操作系统杀死。 甚至当不使用很长一段时间的应用程序(长于10分钟)它会留在进程列表。 甚至当我询问什么是“国家”的过程中有(PROC-> kp_proc.p_stat),它会返回“运行”。

我的问题是:没有任何人知道,以检测其PID当前运行/主动使用的方法(可能是:??提高CPU运行时的CPU时间刻度等)?

Answer 1:

回答你的问题的“正在运行”的一部分:

我使用的代码从这个答案,我们可以找回目前在iPhone和iPad上运行的应用程序

这里的k_proc声明照顾: http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/sys/proc.h

随着试验和错误发现,与设置为18432的p_flag中的进程是当前正在运行的应用程序(在这种情况下,本次测试)。

看到第一个环节,并更换内部的与循环:

if (process[i].kp_proc.p_flag == 18432){

                        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 * status       = [[NSString alloc] initWithFormat:@"%d",process[i].kp_proc.p_flag ];

                        NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName,status, nil]
                                                                            forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName",@"flag", nil]];

                        [array addObject:dict];

}


文章来源: Detect which app is currently running on iOS using sysctl
标签: ios sysctl