我使用以下代码获取在Cocoa中运行应用程序的列表:
for (NSRunningApplication *app in [[NSWorkspace sharedWorkspace] runningApplications]) {
MNSLog(@"%@",[app localizedName]);
}
但是,我从终端会话开始的应用程序没有出现在列表中(“终端”正好出现)。该应用程序是从执行可可代码的同一用户启动的。
我的启动应用程序是否在终端下?在这种情况下,如何找到它的名称和参数?
在另一个终端会话中运行ps会正确显示我的过程。
答案 0 :(得分:2)
使用NSTask
执行ps
Shell命令。您可以检查ps
手册页,根据要返回的信息确定要传递的参数。使用NSPipe
和NSFileHandle
从任务中获取结果。
如果您想进行一些过滤,可以在应用获取结果之前通过ps
输出grep
输出。
对于您的第一个问题,我认为NSWorkspace
只能看到使用窗口服务器的应用程序,因此您只能看到终端,而不是内部运行的可执行文件。
答案 1 :(得分:2)
您可以使用sysctl
或ps
命令获取所有BSD进程的列表。看看unable to detect application running with another user