- 는
lseek(fd,0)
을 사용해도 안전하고 대신이 파일 다음의 업데이트 된 내용을 얻기 위해 그것을 재개 후read(fd,buf)
/proc/stat
의 파일? - 그리고이 파일을 연 후에
mmap()
호출이 실제로 수행하는 작업 (아래 참조)은 무엇입니까?
내가 겪고있는 문제는 너무 낮은 CPU 사용량 (소프트웨어 인터럽트의 경우 10 % 대 100 %)입니다. strace는 top이이 파일을 다시 열지는 않지만 처음에는 시작으로 다시 읽음을 나타냅니다. 그리고 어쨌든 다음에이 파일에서 읽는 내용은 고양이를 /proc/stat
혼자서 사용할 때 얻을 수있는 것과 일치하지 않습니다.이 안전 lseek의를 사용하는 것입니다() PROC-FS에서 읽을 때이 두 번째 파일
또한 상단과 고양이 /proc/stat
루프를 동시에 실행하면 top은 정확한 CPU 사용을보고하기 시작합니다.
더 많은 차이점은 /proc/stat
파일을 연 직후에 mmap()
을 사용하는 것이고 cat
은 그렇게하지 않는 것입니다. 이은 (여기 filesdes=-1
때문에) 내 문제와 관련이있을 수 있는지 확실하지 않다 : 나는 2.6.32-27-서버 이미지와 우분투 10.04.1 데스크톱 버전을 사용하고
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7b37649000
. CPU는 Intel Q6600입니다.
사실 lseek에 대해 사실입니다. htop은 읽기 전에 매번/proc/stat 파일을 다시 열도록 구현되어 있지만 htop은 또한 잘못된 CPU 사용을보고합니다. 그래서 lseek()를 배제 할 수 있습니다. –