2010-07-26 74 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

相關問題