【问题标题】:Unix - which application is in the foreground?Unix - 哪个应用程序在前台?
【发布时间】:2014-07-14 19:12:25
【问题描述】:

我需要能够确定 Unix 中的某个应用程序/二进制文件是否正在前台运行。

我不想查看 CPU 利用率或内存利用率,因为从技术上讲,应用程序可能在后台并执行长时间运行的任务。

我不一定对代码示例感兴趣。这是可以使用 Python 或其他脚本库实现的吗?

【问题讨论】:

  • 如果你使用subprocess.Popen来生成进程,那么你可以使用Popen.poll来检查它是否正在运行。
  • 程序使用X还是控制台?
  • “在前台运行”是什么意思?你的意思是应用程序是否有焦点或类似的东西?
  • Bakuriu - 是的,我想确定应用程序是否有焦点。
  • “焦点”是窗口管理器的功能,而不是程序。确定哪个进程具有“焦点”将取决于您使用的窗口系统(XWindows?)和特定的桌面/窗口管理器(KDE、Gnome、XFCE 等?)即使“焦点”的概念也是模糊的,如X 焦点可以随鼠标指针移动。

标签: python linux unix redhat


【解决方案1】:

我强烈推荐 python 包psutil,它非常适合系统获取有关衍生进程和所有其他进程的信息。进程对象的方法is_running() 似乎是您想要的。

【讨论】:

  • is_running 可以为后台进程返回true; False 的返回值仅仅意味着它正在休眠或空闲,而不是它在前台。
  • 在这种情况下,您需要找到从( .parent() )调用它的终端,线索在父级的“等待通道”中。如果它正在等待前台运行的进程,则通道为 sys_rt_sigsuspend,如果正在等待用户输入(即进程在后台),则通道为 n_tty_read。此通道存储在 /proc//wchan 中,其中 是进程 ID。您将无法从中判断您的进程是否在后台,并且 shell 现在正在等待新的前台进程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 2014-12-07
  • 1970-01-01
  • 2012-12-16
相关资源
最近更新 更多