Detectar qual aplicativo está sendo executado no iOS usando sysctl

Atualmente, implementei um monitor de atividades simples para assistir a todos os processos em execução no iOS.

Para recuperar uma lista de todos os processos em execução, faço o seguinte:

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

E se eu quiser mais informações sobre um processo específico, farei:

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);

Todas as informações extra do proc que eu quero agora estão armazenadas emproc.

Percebo que os aplicativos não serão mortos pelo sistema operacional. Mesmo quando um aplicativo não for usado por muito tempo (mais de 10 minutos), ele permanecerá na lista de processos. Mesmo quando eu questiono qual "estado" o processo tem (proc-> kp_proc.p_stat), ele retorna "em execução".

Minha pergunta é: alguém sabe um método para detectar qual PID está atualmente em execução / usado ativamente (talvez: aumentando o tempo cpu? Tempo de execução? Carrapatos cpu etc.)?

questionAnswers(1)

yourAnswerToTheQuestion