리눅스 procfs 질문입니다!
조회수 2577회
리눅스의 procfs 의 파일들만 이용하여 ps 명령어를 구현하고 싶은데 어떻게 하면 될까요?
리눅스에서 ps aux 와 비슷하게 출력해주고 싶은데 고수님들 답변 기다리겠습니다ㅜㅜ
ps aux 실행결과
root@raspberrypi:/proc# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.4 5420 3964 ? Ss 14:16 0:04 /sbin/init
root 2 0.0 0.0 0 0 ? S 14:16 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 14:16 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 14:16 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 14:16 0:00 [rcu_sched]
root 8 0.0 0.0 0 0 ? S 14:16 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 14:16 0:00 [migration/0]
root 10 0.0 0.0 0 0 ? S 14:16 0:00 [migration/1]
root 11 0.0 0.0 0 0 ? S 14:16 0:00 [ksoftirqd/1]
root 13 0.0 0.0 0 0 ? S< 14:16 0:00 [kworker/1:0H]
root 14 0.0 0.0 0 0 ? S 14:16 0:00 [migration/2]
root 15 0.0 0.0 0 0 ? S 14:16 0:00 [ksoftirqd/2]
root 17 0.0 0.0 0 0 ? S< 14:16 0:00 [kworker/2:0H]
root 18 0.0 0.0 0 0 ? S 14:16 0:00 [migration/3]
root 19 0.0 0.0 0 0 ? S 14:16 0:00 [ksoftirqd/3]
root 21 0.0 0.0 0 0 ? S< 14:16 0:00 [kworker/3:0H]
root 22 0.0 0.0 0 0 ? S< 14:16 0:00 [khelper]
root 23 0.0 0.0 0 0 ? S 14:16 0:00 [kdevtmpfs]
root 24 0.0 0.0 0 0 ? S< 14:16 0:00 [netns]
root 25 0.0 0.0 0 0 ? S< 14:16 0:00 [perf]
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
(수정) /proc 에서 얻을려면 경로 패턴 "/proc/[숫자]/[부분경로]"을 이해하시면 됩니다. 우선 proc man page 문서를 참고해보세요.
- 숫자 : PID 에 해당합니다.
- 부분경로 : 여러개의 파일이 있습니다. 질문에 올려주신 예에 해당하는 파일만 설명하면 다음과 같습니다.
- %MEM은 계산하셔야 합니다. 참고 링크1, 참고 링크2
- TTY는 장치 번호로 판단하셔야 합니다. 리눅스 장치는 major 번호와 minor 번호로 구성되는데 위 링크를 보시면 tty에 대한 장치 번호 정보가 있습니다. (직접 얻을 수 있는 방법은... 잘 모르겠네요.)
- %CPU는 이 링크를 참고하세요.
부분경로
status 파일
- VmSize: -> VSZ
- VmRSS: -> RSS
stat 파일 : 프로세스 정보
3193 (VBoxHeadless) S 3135 3193 3134 0 -1 4202496 360568 0 406 0 3041427 6421688 0 0 20 0 25 0 3228 2759557120 302185 18446744073709551615 4194304 4218588 140736234964176 140736234950688 139806890640307 0 8192 4096 73728 18446744073709551615 0 0 17 12 0 0 8 0 0
- 앞의 링크에서 주요한 stat 파일의 정보는 아래와 같습니다. (순서는 링크를 참고하세요)
- Pid %d: process ID
- Comm %s: 괄호 안은 실행 파일 이름(경로 제외)
- State %c: RSDZTW중 한 개의 문자. R은 running, S는 인터럽트 가능한 대기(sleeping), D는 인터럽트 불가능한 I/O 대기중, Z는 좀비, T는 traced or stopped (on a signal), 마지막으로 W 는 페이징중.
- Starttime %llu: START와 TIME에 해당
- Vsize %lu: 위의 VSZ 항목
- Rss %ld: 위의 RSS 항목
statm 파일 :이 파일은 메모리 사용정보입니다.
905095 532797 529991 6 0 312198 0
- 파일의 내용은 다음과 같습니다.
- size :total program size (= VmSize in /proc/[pid]/status -> VSZ)
- resident : resident set size (= VmRSS in /proc/[pid]/status -> RSS)
- share : shared pages (i.e., backed by a file)
- text : text (code)
- lib : library (unused in Linux 2.6)
- data : data + stack
- dt : dirty pages (unused in Linux 2.6) - List item
댓글 입력