我正在寻找一种方式来获得在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