2011-09-13 42 views
3

現在我做這樣的事情的清單:有效地獲取流程及名稱

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

這有點低效雖然,每次拉它叫時間大約15%的CPU。 有沒有什麼有效的方式讓我得到一個進程列表和它使用的CPU數量?

此外,是否有辦法將進程列表分解爲僅屬於用戶且不是系統進程的進程列表?

我聽說NSTask可能會工作,但這不是檢查用戶的所有進程,只檢查在dock中活動的進程。

我也在閱讀有關NSWorkSpace的內容,但我不確定最好的方法是什麼。

謝謝!

回答

8

那麼,-[NSWorkspace runningApplications]會爲您提供用戶進程列表,由NSRunningApplication實例表示。一個NSRunningApplication有一個processIdentifier財產,持有pid_t它的過程,然後你可以傳遞給ps - 這可能會更有效率。

也看看蘋果的示例項目"AppList";它演示了使用NSWorkspaceNSRunningApplication,但我不記得它是否顯示CPU使用率。

+0

這對我有效,謝謝! – arooo