В настоящее время я реализовал простой монитор активности для просмотра всех запущенных процессов в 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.
Я замечаю, что приложения не будут убиты ОС. Даже если приложение не используется в течение длительного времени (более 10 минут), оно останется в списке процессов. Даже когда я запрашиваю, какое "состояние" имеет процесс (proc- > kp_proc.p_stat), он возвращает "running".
Мой вопрос: кто-нибудь знает метод обнаружения того, какой PID в настоящее время работает/активно используется (может быть: увеличение времени процессора? время работы? cpu ticks и т.д.)??