現在、iOS で実行中のすべてのプロセスを監視する単純なアクティビティ モニターを実装しています。
実行中のすべてのプロセスのリストを取得するには、次のようにします。
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
特定のプロセスに関する詳細情報が必要な場合は、次のようにします。
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);
必要な追加の proc 情報はすべて proc に保存されます。
アプリが OS によって強制終了されないことに気付きました。アプリが長時間(10分以上)使用されていない場合でも、プロセスリストに残ります。プロセスの「状態」を照会しても (proc->kp_proc.p_stat)、「実行中」が返されます。
私の質問は次のとおりです:現在実行中/アクティブに使用されているPIDを検出する方法を誰かが知っていますか(おそらく:CPU時間の増加?実行時間?CPUティックなど)??