2010-07-26 38 views

回答

1

嘿,你可以做一个系统调用为:

ps -eo pid,pcpu 

,并解析结果。

您可以使用system()C进行此调用。

4

通常的做法是放入C并枚举系统上的进程序列号(回归到Mac OS X之前的版本)。NSWorkspace具有API,但它们并不总是以您的方式工作期望。

请注意,经典进程(在PowerPC系统上)将使用此代码枚举(具有不同的进程序列号),即使它们全都共享一个进程ID。

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进行操作。


使用NSRunningApplicationNSWorkspace

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); 
     } 
    } 
} 
+1

'GetNextProcess让所有BSD processes.Have名单()'现在已经弃用10.9 – BergQuester 2014-02-26 19:23:12

+3

我在10.9发布之前写了这个。 ;)我会更新它。 – 2014-03-04 05:08:15

相关问题