Ich habe derzeit einen einfachen Aktivitätsmonitor implementiert, um alle laufenden Prozesse auf iOS zu überwachen.Ermitteln, welche App derzeit unter iOS mit sysctl ausgeführt wird
Um eine Liste aller laufenden Prozesse abrufen, ich dies tun:
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
Und wenn ich mehr Informationen zu einem bestimmten Prozess wollen, werde ich tun:
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);
alle zusätzlichen proc info Ich möchte jetzt in proc gespeichert werden.
Ich merke, dass Apps vom Betriebssystem nicht getötet werden. Auch wenn eine App längere Zeit nicht benutzt wird (länger als 10 Minuten), bleibt sie in der Prozessliste. Selbst wenn ich abfrage, welchen "Zustand" der Prozess hat (proc-> kp_proc.p_stat), gibt er "running" zurück.
Meine Frage ist: Kennt jemand eine Methode, um festzustellen, welche PID gerade läuft/aktiv verwendet wird (vielleicht: CPU-Zeit erhöhen? Laufzeit? CPU-Ticks etc.) ??
Zuerst habe ich eine Frage an Sie. Wenn der Wert von p_stat 2 ist, bedeutet dies, dass dieser Prozess ausgeführt wird? Als ich auf dem Simulator lief, fand ich, dass ein Teil des Prozesses einen p_stat-Wert von 5 hatte. Außerdem fand ich, dass alle Werte für Tick oder CPU-Zeit 0 sind. Es scheint, dass diese Werte niemals in darwin stat sind. Ich weiß nicht, ob es bei freiem BSD gleich ist. – HChen
Nein. Werte scheinen sich nirgends zu ändern ... also kein Hinweis auf einen laufenden Prozess von sysctl – hackerdiehack
@hackerdiehack Weißt du, wie man herausfinden kann, wenn der Prozess im Vordergrund oder Hintergrund ist? –