Эффективное получение списка процессов и имен

Прямо сейчас я делаю что-то вроде этого:

NSString *pullProcesses = @"ps axco pid,pcpu,user,command";
system([pullProcesses UTF8String]);
NSLog(pullProcesses);

Однако это немного неэффективно, каждый раз, когда он вызывается, он потребляет около 15% ресурсов ЦП. Есть ли какой-нибудь эффективный способ получить список процессов и объем используемого процессора?

Кроме того, есть ли способ разбить этот список процессов на те, которые принадлежат только пользователю и не являются системными процессами?

Я слышал, что NSTask может работать, но это не проверка всех процессов пользователя, а только тех, которые активны в доке.

Я также читаю кое-что о NSWorkSpace, но я не уверен, как лучше всего это сделать.

Спасибо!


person aroooo    schedule 13.09.2011    source источник


Ответы (1)


Итак, -[NSWorkspace runningApplications] предоставит вам список пользовательских процессов, представленных NSRunningApplication экземплярами. NSRunningApplication имеет processIdentifier, содержащее pid_t своего процесса, которое затем можно передать ps — это может быть более эффективным.

Также взгляните на пример проекта Apple под названием "Список приложений"; он демонстрирует использование NSWorkspace и NSRunningApplication, хотя я не могу вспомнить, отображает ли он использование ЦП.

person jscs    schedule 13.09.2011