3

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

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

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

我在终端下启动的应用程序吗?在这种情况下,我怎样才能找到它的名称和参数?

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

4

2 回答 2

2

使用 anNSTask来执行psShell 命令。您可以查看ps手册页,根据您想要返回的信息来确定您想要传递哪些参数。使用NSPipeNSFileHandle从任务中获取结果。

如果你想做一些过滤,你可以在你的应用程序获取结果之前ps通过管道输出。grep

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

于 2013-11-17T16:33:28.873 回答
2

您可以使用sysctlorps命令来获取所有 BSD 进程的列表。看看无法检测到与其他用户一起运行的应用程序

于 2013-11-18T08:52:49.410 回答