Actualmente he implementado un monitor de actividad simple para ver todos los procesos en ejecución en iOS.Detectar qué aplicación se está ejecutando actualmente en iOS usando sysctl
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 acerca de un proceso específico, lo 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);
Todo el extra La información de proceso que deseo ahora está almacenada en proc.
Me di cuenta de que el sistema operativo no matará a las aplicaciones. Incluso cuando una aplicación no se utiliza durante un tiempo prolongado (más de 10 minutos), permanecerá en la lista de procesos. Incluso cuando consulto qué "estado" tiene el proceso (proc-> kp_proc.p_stat), devuelve "en ejecución".
Mi pregunta es: ¿alguien sabe un método para detectar qué PID se está ejecutando actualmente/de forma activa (tal vez: aumentando el tiempo de la CPU? Tiempo de ejecución? Cpu ticks, etc.) ??
En primer lugar, Tengo una pregunta para usted. Cuando el valor de p_stat es 2, ¿significa esto que este proceso se está ejecutando? Cuando corro en el simulador, descubrí que algunos de los procesos tienen un valor de p_stat de 5. Además, encontré que todos los valores para tick o cpu time son 0. Parece que estos valores nunca son stat en darwin. No sé si es lo mismo en BSD gratis. – HChen
No. Los valores no parecen cambiar en ningún lado ... así que no hay indicación de un proceso en ejecución desde sysctl hasta ahora – hackerdiehack
@hackerdiehack ¿Sabes cómo saber cuándo el proceso está en primer plano o en segundo plano? –