【问题标题】:How to get current foreground application's name or PID in OS X?如何在 OS X 中获取当前前台应用程序的名称或 PID?
【发布时间】:2014-07-01 16:43:26
【问题描述】:

我需要在 OS X 中获取当前前台应用程序的名称或 PID? 如何使用终端获取?

【问题讨论】:

  • 可以通过wmctrl完成
  • 它应该被标准命令使用。我不想安装任何额外的库/命令等。
  • 可能涉及 AppleScript;您可能会在 apple.stackexchange.com 上得到更好的回应。

标签: macos bash process terminal


【解决方案1】:

您可以使用“lsappinfo”命令从终端中找到此信息。手册页有很多关于这个工具可以返回的大量信息的细节。

为了获取最前面的应用程序,您可以使用front参数调用lsappinfo。

$ lsappinfo front
ASN:0x0-0x10010:

这将返回启动服务用来识别进程的唯一应用程序说明符 (ASN)。您可以将其反馈给 lsappinfo 以获取有关该过程的更多详细信息。

$ lsappinfo info `lsappinfo front`
"Terminal" ASN:0x0-0x10010: (in front) 
    bundleID="com.apple.Terminal"
    bundle path="/Applications/Utilities/Terminal.app"
    executable path="/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal"
    pid = 652 type="Foreground" flavor=3 Version="326" fileType="APPL" creator="????" Arch=x86_64 
    parentASN="loginwindow" ASN:0x0-0x1001: 
    launch time =  2014/06/25 15:13:00 ( 8 days, 39 minutes, 25.0882 seconds ago )
    checkin time = 2014/06/25 15:13:00 ( 8 days, 39 minutes, 24.6907 seconds ago )
    launch to checkin time: 0.397498 seconds

info 标志采用 -only 标志来仅返回某些字段。使用它,您可以查询 PID、应用程序名称、应用程序包的路径等。

$ lsappinfo info -only pid `lsappinfo front` 
"pid"=652

$ lsappinfo info -only name `lsappinfo front` 
"LSDisplayName"="Terminal"

$ lsappinfo info -only bundlepath `lsappinfo front` 
"LSBundlePath"="/Applications/Utilities/Terminal.app"

【讨论】:

  • 是否有 Apple API 可以通过编程方式获取这些内容?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 2013-04-09
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
相关资源
最近更新 更多