Как получить список всех запущенных процессов на Mac? - PullRequest
6 голосов
/ 26 июля 2010

Было бы хорошо получить:

  1. Идентификатор процесса каждого из них
  2. Сколько процессорного времени используется процессом

и мы можем сделать это для Mac в C или Objective C? Какой-нибудь пример кода был бы потрясающим!

Ответы [ 3 ]

6 голосов
/ 26 июля 2010

Обычный способ сделать это - зайти в C и перечислить серийные номера процессов в системе (возврат к временам до Mac OS X.) NSWorkspace имеет API, но они не всегда работают так, как вы ожидаете.

Обратите внимание, что классические процессы (в системах PowerPC) будут перечисляться с этим кодом (с разными серийными номерами процессов), даже если все они имеют один и тот же идентификатор процесса.

void DoWithProcesses(void (^ callback)(pid_t)) {
    ProcessSerialNumber psn = { 0, kNoProcess };
    while (noErr == GetNextProcess(&psn)) {
        pid_t pid;
        if (noErr == GetProcessPID(&psn, &pid)) {
            callback(pid);
        }
    }
}

ВыЗатем можно вызвать эту функцию и передать блок, который будет делать то, что вы хотите с PID.


Используя NSRunningApplication и NSWorkspace:

void DoWithProcesses(void (^ callback)(pid_t)) {
    NSArray *runningApplications = [[NSWorkspace sharedWorkspace] runningApplications];
    for (NSRunningApplication *app in runningApplications) {
        pid_t pid = [app processIdentifier];
        if (pid != ((pid_t)-1)) {
            callback(pid);
        }
    }
}
3 голосов
/ 16 сентября 2013

Вы можете использовать процедуру BSD sysctl или команду ps, чтобы получить список всех процессов BSD. Посмотрите на https://stackoverflow.com/a/18821357/944634

1 голос
/ 26 июля 2010

Эй, вы можете сделать системный вызов как:

ps -eo pid,pcpu

и проанализировать результаты.

Вы можете сделать этот вызов, используя system() в C .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...