Erkennen die app läuft derzeit auf iOS mit sysctl

Habe ich derzeit implementiert eine einfache Aktivitäts-monitor beobachten Sie alle Laufenden Prozesse auf iOS.

Zum abrufen einer Liste aller Laufenden Prozesse, so mache ich das:

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 möchte, weitere Informationen über einen bestimmten Prozess, 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);

All den zusätzlichen proc info ich will, ist jetzt gespeichert proc.

Ich merke, dass apps nicht getötet werden durch das OS. Selbst wenn Sie eine app nicht für eine lange Zeit (länger als 10 min.) es bleibt in der Prozess-Liste. Auch wenn ich Abfrage, was "Staat" der Prozess (proc->kp_proc.p_stat), gibt es "läuft".

Meine Frage ist: weiß jemand eine Methode zu finden, um die PID ist derzeit in Betrieb/aktiv verwendet (vielleicht: die Zunahme der cpu-Zeit? Laufzeit? cpu-ticks etc.) ??

  • Zuerst habe ich eine Frage für Sie. Wenn der Wert von p_stat 2, dies bedeutet dieser Prozess läuft? Wenn ich auf simulator, fand ich einige der Verfahren p_stat Wert von 5. Darüber hinaus habe ich festgestellt, dass alle Werte für die tick-oder cpu-Zeit sind 0. Es scheint, dass diese Werte nie stat in darwin. Ich weiß nicht, ob es das gleiche in der freien BSD.
  • NÖ. Werte scheinen nicht zu ändern, irgendwo... also kein Indiz für einen Laufenden Prozess von sysctl so weit
  • Wissen Sie, wie Sie Abbildung heraus, wenn der Prozess im hintergrund oder Vordergrund?
  • Ich bin auch daran interessiert zu wissen, wenn Sie dies jemals herausfinden.
  • Ich glaube nicht, dass dies überhaupt möglich ist. Ich habe so getan, viel Forschung zu diesem Thema. Die einzige Möglichkeit, die mir einfällt, ist durch den Missbrauch der undokumentierten Sprungbrett-API.
  • wie können wir berechnen, Speicherbedarf durch den Prozess?
  • hast du irgendwelche Infos/links für die Freigabe auf private APIs für die Abfrage der springboard? Private APIs sind ok für meine (nicht-appstore) Anwendung.

Schreibe einen Kommentar