2014-10-17 4 views
1

Я пытаюсь читать файл /proc/<PID>/maps. I ptrace(PTRACE_ATTACH, <PID>) перед чтением (поэтому процесс должен быть приостановлен).fgets застревает в бесконечном цикле при чтении/proc/PID/maps

код, который читает, выглядит так:

while(fgets(line_buf, BUFSIZ, maps_fd) != NULL){ ... } 

, но это не конец (бесконечный цикл). Я сделал printf line_buf и, как выяснилось, отключил чтение строк, которые он уже прочитал.

Вопросы: Что может изменить файл моих карт? (если что-то меняет его)

Если файл не изменен чем-то другим, то почему строки fgets читают, что он уже прочитал?

ответ

1

Я не могу найти ссылку прямо сейчас, но это была известная ошибка/регрессия в некоторых версиях ядра. Проблема почти наверняка заключается в том, что вы работаете на явном ядре, и вам нужно заменить его на менее багги. Если я смогу найти ссылку на отчет о проблеме, я добавлю его.

+0

ОК, я попробовал обновление до самого последнего ядра '[alexandernst @ stupidbox 0s ~] $ uname -a Linux stupidbox 3.16.4-1-ARCH # 1 SMP PREEMPT Mon Oct 6 08:22:27 CEST 2014 x86_64 GNU/Linux', но я все равно получаю то же самое. Была ли исправлена ​​ошибка? – alexandernst

+0

Я так и думал. Случается ли это только при отслеживании? Возможно, вы делаете что-то неправильно с 'ptrace'. Или, возможно, это ошибка «ptrace». –

+0

Ух, на самом деле, забудьте, что это исправлено после обновления – alexandernst

Смежные вопросы