Эффективно получить список процессов и имен - PullRequest
3 голосов
/ 13 сентября 2011

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

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

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

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

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

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

Спасибо!

1 Ответ

8 голосов
/ 14 сентября 2011

Ну, -[NSWorkspace runningApplications] даст вам список пользовательских процессов, представленных NSRunningApplication экземплярами.У NSRunningApplication есть свойство processIdentifier, содержащее pid_t своего процесса, который затем можно передать ps - это может быть более эффективным.взгляните на пример проекта Apple под названием "AppList" ;он демонстрирует использование NSWorkspace и NSRunningApplication, хотя я не могу вспомнить, отображает ли он загрузку процессора.

...