我想知道某些 GUI 进程是否空闲或在 Linux 中最小化,使用Net-SNMP
.
我一直在做研究,据我所知,SNMP 似乎是为监控服务而设计的,而不是普通用户运行的进程。
我发现只有一个 MIB 对象hrSWRunStatus ( RFC 2790 ),它只有四种运行状态:running(1)、runnable(2)、notRunnable(3)和invalid(4),但通过最大化和最小化一些 GUI 进行测试应用程序不会显示它们各自状态的任何变化,事实上,列出的每个进程snmpwalk
都有runnable(2)状态,除了一个:snmpd
被列为running(1)。
# snmpwalk -v 2c -c public localhost .1.3.6.1.2.1.25.4.2.1.7 | grep "running(1)"
HOST-RESOURCES-MIB::hrSWRunStatus.920 = INTEGER: running(1)
# snmpwalk -v 2c -c public localhost .1.3.6.1.2.1.25.4.2.1.2 | grep 920
HOST-RESOURCES-MIB::hrSWRunName.920 = STRING: "snmpd"
即使使用ps
我也看不到我目前正在使用的进程状态的变化(除了htop
)。如果htop
在终端控制台中运行,比如konsole
我正在用 编写文本kate
,这些进程都没有状态“ R ”(正在运行或可运行),只有“ S ”(可中断睡眠),我觉得这很奇怪,但是应该是那种方式... https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk112953
那么,在 Linux 中,我怎么知道某个进程是空闲的还是最小化的……?
在评论中你说你想开发一个时间跟踪应用程序,用于跟踪应用程序的使用情况。我想您可以通过在任何给定时间跟踪哪个窗口是活动窗口来做到这一点。
为此,您需要访问用户的 X11 会话,然后反复查询其名为
_NET_ACTIVE_WINDOW
.此代码示例可能对您有所帮助: https ://github.com/UltimateHackingKeyboard/current-window-linux/blob/master/get-current-window.c
如果系统使用 Wayland 而不是经典的 X11,不幸的是,Wayland 可能需要自己的解决方案;我只是对那个不够了解。