【问题标题】:NSRunningApplication can't recognize PID of Window Server?NSRunningApplication 无法识别 Window Server 的 PID?
【发布时间】:2012-01-14 05:43:30
【问题描述】:

在我的 Cocoa 应用程序中,我正在检测可见窗口并获取其所有者的 PID。然后永远 PID 我创建NSRunningApplication 对象(使用runningApplicationWithProcessIdentifier:)来获取更多信息(本地化名称、路径、属性等)

一切正常,直到我尝试使用 PID 88 创建NSRunningApplication,它属于(在我的情况下)Window Server。它只是不创建该对象,并且根据 Apple 手册它返回 nil - 换句话说:没有具有该 PID 的进程。

这怎么可能?如果它不存在,我将无法获得它的 PID,ps 也不会显示它。

有什么建议吗?

【问题讨论】:

标签: cocoa process pid nsrunningapplication


【解决方案1】:

来自documentation(强调添加):

概述
NSRunningApplication 是一个为应用程序的单个实例操作和提供信息的类。 仅跟踪用户应用程序;这并不提供有关系统上每个进程的信息。

【讨论】:

  • 但“用户应用程序”是什么意思?我有一个无法用 NSRunningApplication 跟踪的用户 XPC mach 进程
  • “用户应用程序”是例如运行时出现在 Dock 中的任何应用程序。这是一个具有 GUI 等的过程,(普通最终)用户可以直接与之交互。不是守护进程。
  • 好的,但是返回的许多“应用程序”没有 GUI,也没有出现在 Dock 中(如助手等)
【解决方案2】:

窗口服务器不是用户进程。如果它不适用于 admin 权限,那么您将根本无法这样做。

【讨论】:

  • 换句话说 - 如果我想获取关于非我的进程的信息,我必须以另一种方式进行 - 不使用 NSRunningApplication?
  • 您找到解决方案了吗?我有类似的问题stackoverflow.com/questions/26361106/…
  • @PeterLapisu “仅跟踪用户应用程序;这不会提供有关系统上每个进程的信息”尝试创建一个在与您尝试从中获取信息的进程相同的用户上运行的应用程序,将该数据发送回您的应用程序,我看不出有任何其他方式可以使用可可。
猜你喜欢
  • 1970-01-01
  • 2015-09-09
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
相关资源
最近更新 更多