2014-10-17 26 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