无法在Cocoa中找到正在运行的应用程序

时间:2013-11-17 16:20:54

标签: objective-c macos cocoa process nsworkspace

我使用以下代码获取在Cocoa中运行应用程序的列表:

for (NSRunningApplication *app in [[NSWorkspace sharedWorkspace] runningApplications]) {
   MNSLog(@"%@",[app localizedName]);
}

但是,我从终端会话开始的应用程序没有出现在列表中(“终端”正好出现)。该应用程序是从执行可可代码的同一用户启动的。

我的启动应用程序是否在终端下?在这种情况下,如何找到它的名称和参数?

在另一个终端会话中运行ps会正确显示我的过程。

2 个答案:

答案 0 :(得分:2)

使用NSTask执行ps Shell命令。您可以检查ps手册页,根据要返回的信息确定要传递的参数。使用NSPipeNSFileHandle从任务中获取结果。

如果您想进行一些过滤,可以在应用获取结果之前通过ps输出grep输出。

对于您的第一个问题,我认为NSWorkspace只能看到使用窗口服务器的应用程序,因此您只能看到终端,而不是内部运行的可执行文件。

答案 1 :(得分:2)

您可以使用sysctlps命令获取所有BSD进程的列表。看看unable to detect application running with another user