2013-12-24 3 views
2

Я в основном ищу для создания функции оптимизации памяти (ОЗУ), как указано в следующих приложениях. (Для iPhone SDK)iPhone app kill process

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

Эта функция в основном убивает третьей стороной процесса приложение фона для достижения того же.

Может ли кто-нибудь объяснить мне, как я могу найти, что конкретный процесс не является системным процессом и убивает процесс.

Я использую следующий код, чтобы получить список процессов с идентификатором процесса.

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

Это для джейлбрейковых телефонов или для магазина приложений? – Nate

+0

Указанные приложения ничего не убивают –

+0

Его для магазина приложений @Nate. –

ответ

11

приложение третьей стороны песочница и не имеет силы или власть произвольно убивать процессы и потоки, которые не принадлежат к нему.

Способ работы этих приложений «памяти» заключается в том, что вручную выделяет память в цикле for до тех пор, пока они не получат предупреждения о памяти, а затем вручную освободят память. Поскольку ОС не знает, что ваша память не используется в приложении, она отнимает активную память от других приложений, иногда даже принудительно закрывая их, чтобы предоставить свои ресурсы памяти вашему приложению. После того как вы вручную освободите память, эта память, которая была выделена для вашего приложения, теперь доступна для всей системы, но другие приложения, которые были убиты или находятся в глубоком сне, будут оставаться убитыми или в глубоком сне.

+0

+1 приятное объяснение - интересно, как это работает –

+0

Согласен. Я всегда задавался вопросом, были ли эти типы программ нарядами или нет. По крайней мере, это «имеет смысл», как они работают. – FuzzyBunnySlippers

Смежные вопросы