lseek (fd, 0)
, а затем read (fd, buf)
для / proc / stat
вместо его повторного открытия, чтобы получить обновленное содержимое этого файла в следующий раз? mmap ()
после открытия этого файла (см. ниже)? Проблема, с которой я сталкиваюсь, заключается в том, что top сообщает о слишком низкой загрузке ЦП (10% против 100% для программных прерываний). Строка указывает, что top не открывает этот файл повторно, а вместо этого переходит к началу и снова читает его. И почему-то содержимое, которое читается из этого файла в следующий раз, не совпадает с тем, что я получил бы, когда запустил cat только для файла / proc / stat
.
Также, если я запускаю top и cat / proc / stat
в цикле одновременно, то top начинает сообщать о правильном использовании ЦП.
Еще одно отличие, которое я заметил, заключается в том, что top использует mmap ()
вызывается сразу после открытия файла / proc / stat
, а cat
этого не делает. Я не уверен, может ли это быть связано с моей проблемой (потому что здесь filesdes = -1
):
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7b37649000
Я использую версию Ubuntu 10.04.1 для настольных ПК с образом сервера 2.6.32-27. Процессор - Intel Q6600.