13

現在、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ティックなど)??

4

1 に答える 1

2

質問の「現在実行中」の部分に答える:

私はこの回答のコードを使用しましたiPhoneおよびiPadで現在実行されているアプリケーションを取得できますか

ここで k_proc 宣言を確認しました: http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/sys/proc.h

試行錯誤の結果、p_flag が 18432 に設定されているプロセスが現在実行中のアプリケーションであることがわかりました (この場合はこのテスト)。

最初のリンクを参照し、 for サイクルの内側を次のように置き換えます。

if (process[i].kp_proc.p_flag == 18432){

                        NSString * processID    = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid];
                        NSString * processName  = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm];
                        NSString * status       = [[NSString alloc] initWithFormat:@"%d",process[i].kp_proc.p_flag ];

                        NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName,status, nil]
                                                                            forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName",@"flag", nil]];

                        [array addObject:dict];

}
于 2013-04-12T16:35:30.083 に答える