我正在尋找一種方式來獲得在Mac上所有運行的進程,滿足以下要求:編程讓所有正在運行的進程列表在Mac
1)所有進程(系統和用戶)
2.)給定供應商流程的唯一流程名稱。例如,來自兩個供應商的應用程序可能具有相同的進程名稱(如Activity Monitor中所示)。用下面的代碼,bundleIdentifier會給出一個唯一的名字。活動監視器可能會顯示具有相同進程名稱的多個進程,但該進程名稱對於該進程是唯一的。
3.)如果過程具有窗口
下面的代碼將執行圖2和3,但不爲1(它只是變得用戶的進程)。
for (NSRunningApplication app in [[NSWorkspace sharedWorkspace] runningApplications]) {
NSString *uniqueName = app.bundleIdentifier;
BOOL hasWindow = (app.activationPolicy == NSApplicationActivationPolicyRegular)?YES:NO;
}
有沒有人知道另一種方式來滿足所有3個要求?
你能詳細說明你需要#2嗎?該系統例如啓動mdworker等多個進程並行工作,因此這實際上是不可能的。但是,根據你實際要做的事情,可能存在對你來說「足夠獨特」的標識符。例如。如果您只是想在運行時跟蹤進程,則可以使用PID,但這是隨機的,只在運行時纔有效。路徑可以改變(即使在一個進程正在運行時),但對某些使用情況可能足夠好... – uliwitness
如果您需要在Mac上查找所有窗口(針對當前用戶),請查看CGWindowList。 ISTR他們可以爲您提供每個窗口的PID,您可以使用它們將它們與從別處獲得的過程列表相關聯。我認爲他們甚至包括一個你可以向用戶展示的進程名(但是沒有一個足夠用於#2)。 – uliwitness