使用Unix中的acct结构进行进程记帐

时间:2017-01-03 08:26:16

标签: unix process-accounting

我已经阅读过Advanced Unix中进程记帐的概念。 据我所知,这些记帐记录通常是少量的二进制数据,包括命令的名称,使用的CPU时间量,用户ID和组ID,进程的开始时间等。 但我不明白如何访问acct结构。

struct acct ac_data;

如何访问acct结构以及如何启用和禁用进程记帐?

1 个答案:

答案 0 :(得分:0)

首先,值得注意的是,在某些系统上,默认情况下会禁用进程记帐(我知道它在我的特定Linux系统和默认情况下最新的macOS 10.12上已禁用)。这是因为许多人认为使用二进制文件进行日志记录会违反Unix philosophy,特别是此部分:

  

编写程序来处理文本流,因为这是一个通用接口。

所有这些都说明了,你需要做几件事:

  1. 启用进程记帐。您可以使用acct(2)命令执行此操作,建议您查看系统的联机帮助页here are some for Linux online。您可以使用此命令指定要登录的位置,或使用NULL关闭进程记帐。

  2. 读入会计记录。为此,您需要fread(3)函数,该函数从文件中读取二进制数据。请注意,这不是跨平台的,因为每个系统可能都有acct结构的不同字段(在这里您可以看到二进制接口的问题)。同样,我强烈建议您阅读fread的联机帮助页,他们非常清楚如何使用它。

  3. 阅读结构的字段。在程序中获得acct结构后,您可以像访问任何其他结构一样访问字段。要了解您可以使用哪些字段,请再次阅读联机帮助页。 This page显示一个特定系统上的字段。

  4. 正如您可能已经注意到的,这里的一个共同主题是阅读联机帮助页。它们非常简洁,我认为这是将特定系统的工作方式拼凑在一起的好方法。在您的系统上输入man 5 acct,您将拥有所需的一切!

相关问题