如何知道我的应用程序的使用情况?

如何知道我的应用程序的使用情况?

我想知道我的程序已经使用了多长时间。例如,如果我使用网络浏览器,我想知道开始和关闭时间以获得总使用时间。

基本上我想知道应用程序何时启动以及何时结束,并根据事件执行诸如在文件中注册时间之类的操作。

我搜索过有关监听内核事件或类似内容的内容,但一无所获。我也尝试过,supervisord但它说该过程关闭得太快并且没有记录任何内容。

我的另一个尝试是使用pyinotify库来监视/proc文件夹,但这完全失败了。

我在 Ubuntu 上工作。有小费吗?

这些是我的来源

答案1

您可以使用 BSD 进程记帐。lastcomm不报告经过的时间,但至少在Linux上,它存储在会计数据库中,并且可以使用命令查询dump-acct

$ sudo accton on # activate process accounting
$ sleep 5.23
$ sudo dump-acct /var/log/account/pacct | grep '^sleep'
sleep       |v3|     0.00|     0.00|   523.00| 10031| 10031| 14632.00|     0.00|   15261      416|Mon Jun  2 17:09:37 2014

经过的时间是第 5 场(523 厘秒以上)。

第三和第四字段是用户时间和系统时间,即CPU(任何CPU)运行该进程(该进程的任何线程)所花费的时间。

请注意(至少在 Linux 上),进程(其任何线程)死亡时会被记入,并作为其死亡时的进程名称。这意味着例如:

sh -c 'sleep 4; exec sleep 5'

一个进程执行sh,然后派生另一个进程来执行sleep 4,然后第一个进程执行sleep 5(因此更改名称)。在会计数据库中,我们得到:

sleep           |v3|     0.00|     0.00|   400.00|  1000|  1000| 10320.00|     0.00|   28867    28866|Tue Jun  3 07:45:52 2014
sleep           |v3|     0.00|     0.00|   900.00|  1000|  1000| 10320.00|     0.00|   28866    28801|Tue Jun  3 07:45:52 2014

这是运行的过程sh,然后sleep 5计算sleep持续时间为 900 厘秒,并且没有提及sh

对于firefox(一个严重的多线程应用程序)不幸的是,在我的例子中,我看到的时间非常短,因为当进程的一个短命线程死亡时就会被计算在内。

相关内容