Detecta qué aplicación se está ejecutando actualmente en iOS usando sysctl

Actualmente he implementado un monitor de actividad simple para ver todos los procesos en ejecución en iOS.

Para recuperar una lista de todos los procesos en ejecución, hago esto:

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

Y si quiero más información sobre un proceso específico, haré:

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

Toda la información de proceso adicional que quiero ahora se almacena enproc.

Me doy cuenta de que las aplicaciones no serán eliminadas por el sistema operativo. Incluso cuando una aplicación no se utiliza durante mucho tiempo (más de 10 minutos) permanecerá en la lista de procesos. Incluso cuando pregunto qué "estado" tiene el proceso (proc-> kp_proc.p_stat), devuelve "running".

Mi pregunta es: ¿Alguien sabe un método para detectar qué PID se está ejecutando o está utilizando activamente (tal vez: ¿aumentando el tiempo de funcionamiento de la CPU? ¿El tiempo de funcionamiento?

Respuestas a la pregunta(1)

Su respuesta a la pregunta