文件上的实时更新/ proc / <pid> /打开时的状态</pid>

时间:2014-02-20 13:12:15

标签: c linux kernel ubuntu-12.04

我正在尝试从/proc/<pid>/status文件中读取信息(以获取使用的内存)。

为此,我以读取模式打开文件:

file = fopen("/proc/self/status", "r");

在此步骤之后,为了获取内存,我读取了以“VmRSS”开头的行。

我的问题是:

每次我读这行时,即使文件已经改变,它也是相同的值。

我这样做是为了获得我程序的实时内存使用情况。所以我打电话给fopen()一次, 然后当我需要更新信息时,我会调用fseek()转到文件的开头。

char line[128];
fseek(file, 0, SEEK_SET);
while (fgets(line, 128, file) != NULL)
{
  //...
}

但是,除非重新打开,否则文件不会更新。出于性能原因,我不想重新打开它。

我尝试将“r”更改为“r +”(根据fopen()的文档有一个“打开文件进行更新”),但在这种情况下fopen返回NULL。

所以我的问题:

您是否知道我的程序如何打开文件并看到其他程序(此处为内核)只使用一次fopen()调用所做的更改?


注意:

我使用的是Ubuntu 12.04

2 个答案:

答案 0 :(得分:4)

您需要重新打开文件以避免竞争条件, proc是memeory中的文件系统,大多数/ proc内容正在打开时修复。

答案 1 :(得分:0)

也许您可以使用 open 而不是 fopen 打开 ## <----A---->|<-B-> [ [ 0., 1., 2., 0. ], [ 0., 3., 5., 1. ] ] 文件。

/proc/<pid>/status
相关问题