LINUX의 TOP 명령과 똑같이 데이터를 표시하는 GUI를 만들고 싶다면 데이터를 어디서 얻을 수 있나요?

LINUX의 TOP 명령과 똑같이 데이터를 표시하는 GUI를 만들고 싶다면 데이터를 어디서 얻을 수 있나요?

/proc/[pid]/stat 파일의 첫 번째 열에서 PID(첫 번째 열)를 얻을 수 있다는 것을 알았습니다. 나머지 속성을 어디서 찾을 수 있는지 잘 모르겠습니다. 내 생각엔 다른 속성을 기반으로 %CPU와 %MEM을 계산해야 할 것 같습니다. 누구든지 이 문제를 해결하도록 도와줄 수 있나요? 내 GUI는 정확히 top과 같아야 합니다. 저는 GUI에 Python3과 ttk를 사용하고 있습니다.

답변1

다음을 입력하는 경우:

strace -o outfile top

top모든 시스템 호출을 추적하고 결과를 저장하는 동안 평소대로 실행 됩니다 outfile. 열려는 파일은 시스템 호출에 대한 호출로 표시됩니다 open(2). 이 명령을 실행한 후에는 top계속해서 많은 데이터를 추가하고 읽은 내용을 알려주는 데 몇 초면 충분하므로 빠르게 종료 해야 합니다 .

내 시스템에서 빠른 실행을 실행해 보면 대부분의 데이터가 /proc/<pid>/stat, /proc/<pid>/status및 에서 나오는 것으로 보입니다 /proc/<pid>/statm. 일부 검색과 실험을 통해 이러한 형식을 결정할 수 있습니다.

답변2

man 5 proc에는 proc 파일 시스템에서 찾을 수 있는 자세한 정보가 많이 있습니다.

procps 라이브러리는 기본적으로 해당 파일 시스템의 파일을 읽고, 구문 분석하고, 찾은 내용에 따라 변수나 구조를 설정하는 일련의 항목입니다. 일반적으로 "ps/top 등이 X 값을 표시하는 이유"에 대한 대답은 "그게 파일 Z에 있기 때문입니다"입니다.

우리는 procps용 libproc/libprocps/libwhatwillwecallitnext 라이브러리를 적극적으로 재설계하여 일반 라이브러리와 더욱 유사하게 만들고 있습니다.

현재는 C 바인딩만 있지만(이것이 필요하기 때문에) 미래에는 다른 바인딩도 있을 수 있습니다. API를 먼저 안정화해야 하며, 새로운 라이브러리를 출시하여 실제 세계에서 어떻게 작동하는지 확인한 다음 이를 연구해야 합니다.

최상위 소스 코드를 보는 것은 또 다른 아이디어입니다. 문제는 직접 개발하는 경우 커널 사람들이 procfs에 수행하는 모든 작업을 추적해야 하며 라이브러리는 우리에게 골칫거리입니다.

관련 정보