iPhone应用程序杀死进程

时间:2013-12-24 09:09:21

标签: ios iphone objective-c process

我基本上希望创建以下应用程序中给出的内存(RAM)优化功能。 (适用于iPhone sdk)

https://itunes.apple.com/us/app/memory-100-pro/id644853504?mt=8 https://itunes.apple.com/th/app/memory-pro/id483447668?mt=8

此功能基本上会杀死第三方应用后台​​进程以实现相同目的。

任何人都可以指导我如何才能发现特定流程不是系统流程并终止流程。

我正在使用以下代码获取进程ID的进程列表。

struct kinfo_proc *procs = NULL, *newprocs;
char          thiscmd[MAXCOMLEN + 1];
pid_t           thispid;
int           mib[4];
size_t                miblen;
int           i, st, nprocs;
size_t                size;


size = 0;
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_ALL;
mib[3] = 0;
miblen = 3;

st = sysctl(mib, miblen, NULL, &size, NULL, 0);
do {
    size += size / 10;
    newprocs = realloc(procs, size);
    if (newprocs == 0) {
        if (procs)
            free(procs);
        errx(1, "could not reallocate memory");
    }
    procs = newprocs;
    st = sysctl(mib, miblen, procs, &size, NULL, 0);
} while (st == -1 && errno == ENOMEM);

nprocs = size / sizeof(struct kinfo_proc);

/* Now print out the data */
for (i = 0; i < nprocs; i++) {
    thispid = procs[i].kp_proc.p_pid;
    strncpy(thiscmd, procs[i].kp_proc.p_comm, MAXCOMLEN);
    thiscmd[MAXCOMLEN] = '\0';
    printf("%d\t%s\n", thispid, thiscmd);

    NSString * processName = [[NSString alloc] initWithFormat:@"%s", procs[i].kp_proc.p_comm];
    if([processName isEqualToString:@"templerunbrave"])
        kill(thispid, SIGKILL);


}

/* Clean up */
free(procs);

1 个答案:

答案 0 :(得分:11)

第三方应用程序是沙盒的,没有权力或权限来任意杀死不属于它的进程和线程。

这些“内存”应用程序的工作方式是在for循环中逐步手动分配内存,直到它们获得内存警告,然后手动释放内存。由于操作系统不知道您的内存未在应用程序中使用,因此它会将活动内存远离其他应用程序,有时甚至强制关闭它们以便为您的应用程序提供内存资源。一旦手动释放内存,分配给您的应用程序的内存现在可供整个系统使用,但其他被杀或处于深度睡眠状态的应用程序将被杀死或处于深度睡眠状态。