我目前已经实现了一个简单的活动监控器上观看的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时间刻度等)?