试试这个psacct包(GNU 会计),它应该做你需要的一切,一旦安装和启用(accton),然后lastcomm将保留关于用户进程的报告(另见sa和dump-acct)。请参阅此参考:用户执行的命令日志文件
您可能需要升级版本以记录 PID/PPID,请参阅https://serverfault.com/questions/334547/how-can-i-enable-pid-and-ppid-fields-in-psacct-dump-acct,否则我怀疑它会在fork()没有exec().
更新
如果您在第二列中的lastcomm输出F,则意味着该进程是一个分支(从未调用exec()过用新进程替换自身)。的输出dump-acct 应该以 acct v3 格式向您显示 PID(和 PPID)。
psacct 的替代方案可能是 new(ish) taskstats,目前还没有大量支持它,AFAICT,请参阅Documentation/accounting/taskstats.txt您的内核版本源。这可能有助于您开始http://code.google.com/p/arsenalsuite/wiki/TrackingIOUsage https://code.google.com/archive/p/anim-studio-tools/ 具体的代码示例是tasklogger.c,您将需要修改printf()在功能上线print_delayacct2(),首先更换%u同%llu为__u64类型,其次是添加字段ac_uid(也许ac_gid),您需要通过用户跟踪。用类似的东西调用它tasklogger -dl -m 0-1(其中-m 0-1表示 CPU 0-1)。然后,您将在每个进程退出时看到实时详细信息。
Linux::Taskstats::ReadCPAN 上还有一个 perl 模块,虽然我没有使用过。
如果您想要每个用户的并发进程计数,则需要根据时间戳处理数据,这听起来并不简单。
更新 2
好的,检查所需psacct支持的内容是:
CONFIG_BSD_PROCESS_ACCT和CONFIG_BSD_PROCESS_ACCT_V3启用psacct) 包,如上所述上述所有应该在CentOS 6的是真的,我已经查了5.x和它不具备CONFIG_BSD_PROCESS_ACCT_V3=y,那么你就必须重新编译内核来启用它。
原版psacct-6.3.2大约有 15 年历史,Red Hat/CentOS 版本已经向后移植了 v3 和 PID 显示支持(我现在无法测试,但应该可以使用)。
要检查您的内核配置:
zgrep BSD_PROCESS_ACCT /proc/config.gz /boot/config-`uname -r`
Run Code Online (Sandbox Code Playgroud)