리눅스 procfs 질문입니다!


리눅스의 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]

  • 2016년 03월 30일에 작성됨

조회수 313


1 답변


좋아요
3
싫어요
채택취소하기

(수정) /proc 에서 얻을려면 경로 패턴 "/proc/[숫자]/[부분경로]"을 이해하시면 됩니다. 우선 proc man page 문서를 참고해보세요.

  1. 숫자 : PID 에 해당합니다.
  2. 부분경로 : 여러개의 파일이 있습니다. 질문에 올려주신 예에 해당하는 파일만 설명하면 다음과 같습니다.
  3. %MEM은 계산하셔야 합니다. 참고 링크1, 참고 링크2
  4. TTY는 장치 번호로 판단하셔야 합니다. 리눅스 장치는 major 번호와 minor 번호로 구성되는데 위 링크를 보시면 tty에 대한 장치 번호 정보가 있습니다. (직접 얻을 수 있는 방법은... 잘 모르겠네요.)
  5. %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
  • 2016년 06월 01일에 수정됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.
  • 2016년 03월 30일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close