【问题标题】:Can we retrieve the applications currently running in iPhone and iPad我们可以检索当前在 iPhone 和 iPad 上运行的应用程序吗
【发布时间】:2011-05-17 18:58:54
【问题描述】:

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

更新

我们可以在破旧的手机中进行操作吗?我们可以为 CYDIA 商店的应用做这件事吗?

【问题讨论】:

    标签: iphone ios4


    【解决方案1】:

    您可以获取正在运行的进程列表,并且可以从进程 ID 中找出哪些是系统进程,哪些是第 3 方应用程序,但无论如何我不相信您可以在应用程序商店的应用程序中使用它。 (代码取自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;
    }:
    

    【讨论】:

    • @Krishnan,此代码适用于非越狱设备,但 Apple 可能会禁止在应用程序中使用此功能。如果您以 Cydia 商店为目标,您可以这样做(我认为(但不是 100% 肯定)我见过一个像任务管理器一样工作的应用程序 - 显示所有正在运行的应用程序并允许终止它们)
    • 谢谢。如果您知道有关此的任何其他信息,请分享。
    • 你绝对可以在 App Store 上做这样的事情。这是证据:stackoverflow.com/questions/8275578/…
    • @DmitryIsakov 你找到解决 iOS9+ 的方法了吗?
    • @ValerioSantinelli:此方法如果您在沙盒之外有效。如果您想要该列表,请创建一个未沙箱化的助手,然后使用 IPC 从该助手中获取它。
    【解决方案2】:

    为什么要循环直到运行 put of memory?我认为这要简单得多;)

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      相关资源
      最近更新 更多