以编程方式获取Mac上所有正在运行的进程列表

时间:2016-11-15 22:11:03

标签: objective-c c macos process macos-sierra

我正在寻找一种方法让Mac上的所有正在运行的进程满足这些要求:

1。)所有流程(系统和用户)

2.。)给定供应商流程的唯一流程名称。例如,来自两个供应商的应用程序可能具有相同的进程名称(如活动监视器中所示)。使用下面的代码,bundleIdentifier将给出一个唯一的名称。活动监视器可能会显示具有相同进程名称的多个进程,但该进程名称对于该进程是唯一的。

3.)如果进程有窗口

下面的代码将执行2和3,但不是1(它只能获取用户的进程)。

for (NSRunningApplication app in [[NSWorkspace sharedWorkspace] runningApplications]) {
    NSString *uniqueName = app.bundleIdentifier;
    BOOL hasWindow = (app.activationPolicy == NSApplicationActivationPolicyRegular)?YES:NO;
}

有没有人知道满足所有3个要求的另一种方法?

1 个答案:

答案 0 :(得分:0)

从Darwin Sources档案中获取ps的来源(它将被隐藏在其中一个系统工具档案中,而不是单独存放)并从那里开始。

那会得到你(1)。 (2)不可能;两个进程可以具有相同的名称(但每个进程必须具有唯一的PID - 使用它)。

(3)你必须以某种方式去掠夺窗口服务器。我认为GitHub上可能有一些片段可以证明如何做到这一点。