我想知道我的程序已经使用了多长时间。例如,如果我使用网络浏览器,我想知道开始和关闭时间以获得总使用时间。
基本上我想知道应用程序何时启动以及何时结束,并根据事件执行诸如在文件中注册时间之类的操作。
我搜索过有关监听内核事件或类似内容的内容,但一无所获。我也尝试过,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
(一个严重的多线程应用程序)不幸的是,在我的例子中,我看到的时间非常短,因为当进程的一个短命线程死亡时就会被计算在内。