代码之家  ›  专栏  ›  技术社区  ›  RK-

我们能取回目前在iphone和ipad上运行的应用程序吗?

  •  12
  • RK-  · 技术社区  · 15 年前

    我们可以检索目前在iPhone和iPad上运行的应用程序吗?

    更新

    我们能在监狱里打坏电话吗?我们可以为Cydia商店的应用程序做这个吗?

    2 回复  |  直到 14 年前
        1
  •  29
  •   Vladimir    15 年前

    你可以从进程ID中得到一个正在运行的进程的列表,也许你可以找出哪些是系统进程,哪些是第三方应用程序,但无论如何,我不相信你可以在应用程序商店中使用它。(代码取自 here )

    - (NSArray *)runningProcesses {
    
        int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0};
        size_t miblen = 4;
    
        size_t size;
        int st = sysctl(mib, miblen, NULL, &size, NULL, 0);
    
        struct kinfo_proc * process = NULL;
        struct kinfo_proc * newprocess = NULL;
    
        do {
    
            size += size / 10;
            newprocess = realloc(process, size);
    
            if (!newprocess){
    
                if (process){
                    free(process);
                }
    
                return nil;
            }
    
            process = newprocess;
            st = sysctl(mib, miblen, process, &size, NULL, 0);
    
        } while (st == -1 && errno == ENOMEM);
    
        if (st == 0){
    
            if (size % sizeof(struct kinfo_proc) == 0){
                int nprocess = size / sizeof(struct kinfo_proc);
    
                if (nprocess){
    
                    NSMutableArray * array = [[NSMutableArray alloc] init];
    
                    for (int i = nprocess - 1; i >= 0; i--){
    
                        NSString * processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid];
                        NSString * processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm];
    
                        NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName, nil] 
                                                                            forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName", nil]];
                        [processID release];
                        [processName release];
                        [array addObject:dict];
                        [dict release];
                    }
    
                    free(process);
                    return [array autorelease];
                }
            }
        }
    
        return nil;
    }:
    
        2
  •  2
  •   hackerdiehack    14 年前

    为什么要循环直到运行内存输出?我认为这要简单得多;)

    size_t size;
    struct kinfo_proc *procs = NULL;
    int status;
    
    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);
    
    推荐文章