2014-10-17 106 views
1

我试图从/proc/<PID>/maps文件中读取。在阅读之前我(ptrace(PTRACE_ATTACH, <PID>))(因此,该过程应该被暂停)。fgets在读取/ proc/PID/maps时陷入无限循环

读取看起来像这样的代码:

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

,但它没有结束(无限循环)。我做了一个printf line_buf,然后fgets它读取已读取的行。

问题:什么可以改变我的地图文件? (如果有什么改变的话)

如果文件没有被别的东西改变,为什么fgets已经读取了它的行?

回答

1

我现在找不到引用,但这是某些内核版本中已知的bug /回退。这个问题几乎可以肯定地说你正在运行一个有问题的内核,并且需要用一个没有问题的内核来替换它。如果我能找到问题报告的链接,我会添加它。

+0

好吧,我试着更新到了最新的内核'[alexandernst @ stupidbox 0〜] $ UNAME -a Linux的stupidbox 3.16.4-1-ARCH#1 SMP PREEMPT周一10月06日8时22分27秒CEST 2014 x86_64的GNU/Linux“,但我仍然一样。那个bug已经修补了吗? – alexandernst 2014-10-17 13:35:20

+0

我当然这么认为。它是否仅在追踪时发生?也许你在用'ptrace'做错了什么。或者这可能是一个“特定于跟踪”的错误。 – 2014-10-17 15:09:17

+0

呃,实际上忘记了,它在升级 – alexandernst 2014-10-17 16:39:00