有没有办法一般使用Perl或Python检索进程统计信息?我们可以保持Linux特定。
有一些问题:我不会提前知道PID,但我可以从脚本本身运行有问题的过程。例如,我没有问题:
./myscript.pl some/process/I/want/to/get/stats/for
基本上,我想至少得到进程的内存消耗,但是我可以获得更多的信息(比如进程的运行时间,进程的平均CPU使用率等)。 )
感谢。
答案 0 :(得分:7)
查看Proc::ProcessTable模块,该模块返回有关系统中进程的大量信息。调用“fields”方法以获取可从每个进程中提取的详细信息列表。
我最近发现上面的模块刚刚替换了我在为Linux编写Perl kill程序时编写的Process模块。您可以查看我的脚本here。
可以轻松扩展以从ps命令中提取更多信息。例如。 ' getbycmd '方法返回一个pid列表,其命令行调用与传递的参数匹配。然后,您可以通过调用' getdetail '来检索特定流程的详细信息,方法是将PID传递给它,
my $psTable = Process->new();
# Get list of process owned by 'root'
for my $pid ( $psTable->getbyuser("root") ) {
$psDetail = $psList->getdetail( $pid );
# Do something with the psDetail..
}
答案 1 :(得分:2)
如果你是fork()
孩子,你就会知道它是PID。
然后,在父级内,您可以解析/proc/<PID/
中的文件以检查内存和CPU使用情况,尽管只要子进程正在运行。
答案 2 :(得分:1)
一个常见的误解是阅读/过程就像阅读/家庭。 / proc旨在通过一个open()提供相同的信息,即20个类似的系统调用填充某些结构可以提供。阅读它不会污染缓冲区,将无辜程序发送到寻呼地狱或以其他方式导致小猫死亡。
访问/ proc / foo只是告诉内核“给我关于foo的信息,我可以用语言无关的方式处理”
如果您需要有关/ proc / {pid} /中更多内容的详细信息,请更新您的问题并发布。