15. pamp(메모리 맵 출력) |
1) 경로 : /usr/bin/pmap
2) 요약 : 프로세스의 메모리 맵을 출력
3) 사용 방법 : pmap [-x|-d] [-q] pid...
4) 옵션
-x extended : 확장된 포맷으로 출력
-d device : 디바이스 포맷을 출력
-q quiet : 정보를 간단하게 출력
-V show version : 버전 정보 출력
5) 추가 설명
pmap 명령어는 프로세스 ID를 기준으로 메모리 맵 정보를 출력합니다. 아래는 pidof로 gnome-terminal의 프로세스 ID를 인자로 넘겨 받습니다. 첫 번째 행의 숫자는 현재 프로그램의 프로세스 번호를 출력하고, 마지막 행의 total 값은 프로세스에서 사용하고 있는 전체 메모리의 크기를 출력합니다. 출력 내용의 중간에는 라이브러리의 위치와 메모리 주소를 확인할 수 있습니다.
$sudo pmap 'pidof gnome-terminal'
2175: gnome-terminal
00110000 12K r-x-- /usr/lib/liblaunchpad-intergration.so.1.0.0
00113000 4K r---- /usr/lib/liblaunchpad-intergration.so.1.0.0
00114000 4K rw--- /usr/lib/liblaunchpad-interation.so.1.0.0
00115000 100K r-x-- /usr/lib/libatk-1.0.so.0.3009.1
... 중간 생략 ...
b7762000 8L r---- /usr/lib/locale/ko_KR.utf8/LC_IDENTIFICATION
b7762000 8K rw--- [ annon ]
bfee2000 108K rw--- [ stack ]
total 52752K
위에서 살펴 본 pmap의 정보는 /proc/2175/maps에서도 동일하게 확인할 수 있습니다.
$ pidof gnome-terminal
2175
$ sudo cat /proc/2175/maps
아래와 같이 -x 옵션은 Address, KBytes, RSS, Anon, Locked, Mode, Mapping 필드의 자세한 정보를 출력합니다.
$ sudo pmap -x 2175
2175: gnome-terminal
Address Kbytes RSS Anon Locked Mode Mapping
00110000 12 - - - r-x-- liblaunchpad-intergration.so.1.0.0
00113000 4 - - - r---- liblaunchpad-intergration.so.1.0.0
00:114000 4 - - - rw--- liblaunchpad-intergration.so.1.0.0
00115000 100 - - - r-x-- libatk-1.0.so.0.3009.1
... 생략 ...
16. ps(프로세스 상태 보기) |
1) 경로 : /bin/ps
2) 요약 : 프로세스의 현재 상태를 출력
3) 사용 방법 : ps [옵션]
4) 옵션
<전체 프로세스와 관련된 옵션>
-A : 모든 프로세스를 출력
-N : -A 옵션과 비슷하나 ps 프로세스를 제외하고 출력
-a : 세션 리더 및 터미널에 속하지 않는 프로세스를 제외하고 출력
-d : 세션 리더를 제외한 모든 프로세스를 출력
-e : 커널 프로세스를 제외한 모든 프로세스를 출력
T : 현재 터미널에서의 모든 프로세스를 출력
a : 현재 터미널의 사용자 고유 프로세스를 출력
r : 현재 실행 중인 프로세스를 출력
x : 터미널이 없는 프로세스를 출력
--deselect : -N 옵션과 같음
<특정 프로세스르르 선택하여 보여주는 옵션>
-C : 지정한 명령어의 이름에 관련된 정보를 출력
-G : 그룹 ID에 관련된 정보를 출력(이름도 지원)
-U : 사용자 ID에 관련된 정보를 출력(이름도 지원)
-g : 지정한 세션 리더 또는 그룹명에 관련한 정보를 출력
-p : 프로세스 ID를 출력
-s : 세션에 속한 프로세스를 지정
-t : tty를 지정
-u : 사용자 ID를 지정(이름도 지원)
U : 지정한 사용자의 프로세스를 출력
p : 프로세스 ID를 지정
t : tty를 지정
--Group : 실제 그룹 이름이나 ID를 지정
--User : 실제 사용자 이름이나 ID를 지정
--group : 유효 사용자 이름이나 ID를 지정
--pid : 프로세스 ID를 지정
--sid : 세션 ID를 지정
--tty : 터미널을 지정
--user : 유효 사용자 이름이나 ID를 지정
-123 : --sid 123과 같은 의미
123 : --pid 123과 같은 의미
<출력 결과 필드를 제어하는 옵션>
-0(숫자 영) : PID, TTY, STAT, TIME, COMMAND 등의 필드 목록 출력
-c : PID, CLS, PRI, TTY, TIME, CMD 등의 필드 목록 출력
-f : UID, PID, PPID, C, STIME, TTY, TIME, CMD 등의 필드를 CMD 필드의 전체 명령어 형태로 출력
-l(엘) : F, S, UID, PID, PPID, C, PRI, NI, ADDR, SZ, WCHAN, TTY, TIME, CMD 필드의 상세 정보를 출력
-o(영어 소문자 오) : 사용자가 정의한 포맷을 지정
-y : -l(엘) 이나 l(엘) 옵션과 함께 ADDR 필드를 RSS 필드로 출력
0(숫자 영) : PID, TTY, STAT, IME COMMAND 필드 정보를 출력
X : PID, STACKP, ESP, EIP, TMOUT, ALARM, STAT, TTY, TIME, COMMAND 필드의 정보를 리눅스 i386 레지스터 형식으로 출력
j : PPID, PID, PGID, SID, TTY, TPGID, STAT, UDI, TIME, COMMAND 필드의 정보를 작업 제어에 관련된 형식으로 출력
l(엘) : f, s, UID, PPID, C, PRI, NI, ADDR, SZ, PSS, WCHAN, TTY, TIME, CMD 필드의 정보를 출력하고 -l(엘) 옵션과 함께 PSS 필드를 추가하여 출력
o(소문자 영어 오) : 사용자 지정 형식으로 출력
s : UID, PID, %CPU, %MEM, VSZ, RSS, RRT, STAT, START, TIME, COMMAND 필드의 정보를 출력
u : USER, PID, %CPU, %MEM, VS, RSS, TTY, STAT, START, TIME, COMMAND 필드의 정보를 출력
v : PID, TTY, STAT, TIME, MAJFL, TRS, DRS, RSS, %MEM, COMMAND 필드의 정보를 출력
--format : 사용자 지정 형식으로 출려
<출력 필드의 내용을 변경하는 옵션>
-H : 프로세스를 계층형으로 출력
-m : 스레드 정보를 출력
-n namelist : 시스템 이름 리스트 파일(namelist)을 지정
-w : 너비에 맞게 잘려진 내용을 제한이 없는 너비의 내용으로 상세하게 출력
--clos : 스크린의 너비를 설정
--columns : 스크린의 너비를 설정
--cumulative : 죽은 자식 프로세스 데이터를 포함하여 출력
--forest : 아스키 문자의 프로세스 트리 형태로 출력
--html : HTML 이스케이프로 출력
--headers : 헤더 라인을 반복
-no-headers : 헤더를 보이지 않게 함
--lines : 스크린의 높이를 설정
--rows : 스크린의 너비를 설정
--sort : 정렬 방식 지정. --sort=[+]key(,[+]key[...] 형식. ps jax --sort=uid,-ppid, +pid 형식으로 지정 가능
C : CPU 시간을 이용
N : 지정한 시스템 이름의 리스트 파일을 사용
O(영어 대문자 오) : 정렬 순서 지정하기 위한 옵션으로 O[+],[+l-]K[...]의 형식으로 지정. +는 오름차순 정렬, -는 내림차순 정렬
S : 죽은 자식 프로세스의 데이터를 포함
c : 시스템 내부에 보관 중인 명령어 이름을 출력
e : 명령어에 대한 매개 변수와 함께 환경 변수를 출력
f : 아스키(*) 아트로 프로세스 트리를 출력
h : 헤더라인은 출력하지 않음
m : 모든 스레드 정보를 출력
n : WCHAN과 USER 필드를 숫자 값으로 출력
w : 필드의 너비에 맞게 잘려진 내용을 너비보다 상세하게 출력
--clos : 스크린의 너비를 설정
--columns : 스크린의 너비를 설정
--cumulative : 죽은 자식 프로세스 데이터를 포함
--forest : 아스키 아트의 프로세스 트리를 출력
--html : HTML 이스케이프를 출력
--headers: 헤더 라인을 반복
--no-headers : 헤더를 출력하지 않음
--line : 스크린의 높이를 설정
--rows : 스크린의 높이를 설정
--sort : 지정한 정렬 방식
--sort=[+|-]key[,[+|-]key[...] 형식. 예를 들어 ps jax --sort=uid,--ppid,+pid 형식으로 지정 가능
<프로그램의 정보>
-V : 버전 정보 출력
L : 모든 형태의 지시자를 출력
V : 버전 정보 출력
--help : 사용법 출력
--info : 디버깅 정보 출력
--version : 버전 정보 출력
5) 추가 설명
ps 명령어는 프로세스의 현재 상태를 출력합니다. ps로 현재 사용하는 프로세스의 상태를 살펴 봅니다. 아래는 PID, TTY, TiME, CMD 헤더의 필드와 내용을 출력합니다.
$ ps
PID TTY TIME CMD
3134 pts/1 00:00:00 bash
15027 pts/1 00:00:00 ps
ps 명령어는 위의 기본 필드 이외에도 다양한 옵션을 지원합니다.
아래는 필드명을 기준으로 옵션과 필드에 대해서 설명합니다.
필드명 | 설명 |
ADDR | 프로세스 스택의 세그먼트 번호(-l, l 옵션) |
BND | 커널 스레드가 바인드 되는 프로세스의 논리 프로세스 번호(-o 옵션) |
C | 프로세스 사용량(-f, l -l 옵션) |
CMD | 사용자가 실행한 명령 이름(-f, -l, l 옵션) |
COMMAND | 사용자가 실행한 명령 이름(s, u, v 옵션) |
F | 프로세스 및 스레드에 관련된 항목(-l, l 옵션) |
LIM | 메모리에 대한 소프트 한계와 관련된 항목(v 옵션) |
NI | 프로세스의 우선 순위값. 낮을수록 CPU 시간이 높음(-l, l 옵션) |
PID | 프로세스 ID(기본 필드) |
PRI | 프로세스 스케쥴링 우선순위. 낮을수록 우선 순위가 높음(-l, l 옵션) |
RSS | 프로세스의 실제 메모리의 크기로 KB 단위(-l, l 옵션) |
S | 프로세스나 커널 스레드의 상태(-l, l 옵션) |
SIZE | 가상 이미지의 크기(v 옵션) |
SAT | 실행되고 있는 프로세스의 상태(s, u, v 옵션) -D : 디스크 입출력 대기 상태로 인터럽트를 걸 수 없는 상태 -R : 실행 중일 경우 -S : 짧은 슬립 상태 -T : 정지 상태 -Z : 좀비 상태 -W : 메모리에 상주한 페이지가 없는 프로세스 -< : 높은 우선권 프로세스 -N : 낮은 우선권 프로세스 -:L : 페이지가 락이 걸린 상태 |
STIME | 프로세스의 시작 시간(-f, u 옵션) |
SZ | 프로세스가 사용하는 자료와 스택의 크기(-l, l 옵션) |
TIME | 프로세스가 소비한 총시간(기본 필드) |
TRS | 텍스트의 실제 메로리 크기(v 옵션) |
TTY | 연결되어 있는 터미널(기본 필드) |
UID | 사용자 ID(-f, -l, l 옵션) |
USER | 사용자 이름(u 옵션) |
WCHAN | 프로세스에 거주하는 커널 함수(-l, l 옵션) |
VSZ | 가상 메모리에 적재된 프로세스의 KB 단위 크기 |
%CPU | 마지막 1분 동안 프로세스가 사용한 CPU 점유율(u 옵션) |
%MEM | 마지막 1분 동안 프로세스가 사용한 메모리의 점유율(u, v 옵션) |
아래와 같이 -u 옵션은 사용자의 프로세스를 출력하고, -l 옵션은 자세한 정보를 출력합니다.
$ ps -u user -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
1 S 1000 1544 1 0 80 0 - 5966 poll_s ? 00:00:00 gnome-keyring-d
4 S 1000 1562 951 0 80 0 - 6523 poll_s ? 00:00:00 gnome-session
0 S 1000 1593 1562 0 80 0 - 4015 poll_s ? 00:00:00 ibus-daemon
1 S 1000 1597 1562 0 80 0 - 820 poll_s ? 00:00:00 ssh-agent
1 S 1000 1600 1 0 80 0 - 845 poll_s ? 00:00:00 dbus-launch
... 생략 ...
시스템의 모든 프로세스를 확인할 경우 aux 옵션을 사용합니다.
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 2796 1648 ? Ss 05:57 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 05:57 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 05:57 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 05:57 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 05:57 0:00 [watchdog/0]
... 생략 ...
ps는 프로세스 정보 필드를 기준으로 정렬할 수 있습니다. 정렬하려면 O(대문자 영어 오) 옵션이나 --sort 옵션을 사용합니다. O 옵션일 경우는 O[+|-]K[,[+|-]K[...]]의 형식을 사용하고, --sort 옵션일 경우 --sort=[+|-]key[,[+|-]key[...]]의 형식을 사용합니다.
아래는 O 옵션에 -r 기호를 덧붙여 RSS 값이 가장 큰 프로세스를 기준으로 내림차순으로 출력합니다. 만일 플러스(+)면 오름차순으로 정렬합니다.
$ ps aux O-r
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 1605 0.0 0.0 51240 23504 ? S 05:57 0:04 python/usr/share/ibus/ui/gt
user 1756 0.0 2.1 49876 21728 ? S 05:58 0:00 python/usr/share/system-con
user 856 0.0 2.1 29424 21592 tty7 Ss+ 05:57 0:51 /usr/bin/X :0 -nr -verbose -
user 1641 0.0 1.8 72796 19444 ? S 05:57 0:01 nautilus
user 1638 0.0 1.6 44812 16620 ? S 05:57 0:00 gnome-panel
아래 표는 O나 --sort 옵션에서 사용할 수 있는 키값들입니다. 첫 번째 필드의 K는 O옵션에서, 두번째 필드의 키는 --sort 옵션에서 사용하는 옵션입니다. 참고로 둘 이상의 기준으로 정렬할 경우 콤마(,)로 구분하고 앞에 오는 기준이 뛰따라 오는 기준에 우선합니다.
K | key | 설명 |
c | cmd | 실행 이름 |
C | cmdline | 전체 명령 라인 |
f | flags | 플래그 |
g | pgrp | 프로세스 그룹 ID |
G | tpgid | tty에 속한 프로세스 그룹 ID |
i | cutime | 누적 사용자 시간 |
j | cstime | 누적 시스템 시간 |
k | utime | 사용자 시간 |
K | stime | 시스템 시간 |
m | min_flt | 보다 작은 페이지 디폴트 수 |
M | maj_flt | 보다 큰 페이지 디폴트 수 |
n | cmin_flt | 보다 작은 페이지 디폴트의 누적 수 |
N | cmaj_flt | 보다 큰 페이지 디폴트의 누적 수 |
o | session | 세션 ID |
p | pid | 프로세스 ID |
P | ppid | 부모 프로세스 ID |
r | rss | 상주 메모리의 크기 |
R | resident | 상주 페이지 |
s | size | KB 단위의 사용 메모리 크기 |
S | share | 공유 페이지의 수 |
t | tty | tty |
T | start_time | 프로세스가 시작된 시간 |
U | uid | 사용자 ID |
u | user | 사용자 이름 |
v | vsize | 바이트 단위의 전체 VM 크기 |
다음은 자주 사용하는 ps 옵션의 조합입니다. 표준 문자으로 시스템의 모든 프로세스를 출력합니다.
$ ps -e
$ ps -ef
$ ps -eF
$ ps -ely
BSD 문장으로 시스템의 모든 프로세스를 출력합니다.
$ ps ax
$ ps aux
프로세스 트리를 출력할 수 있습니다.
$ ps -ejH
$ ps axjf
스레드 정보를 출력합니다.
$ ps -eLf
$ ps axms
아래 옵션은 보안 정보를 확인할 수 있습니다.
$ ps -eo euser, ruser, suser, fuser, f, comm, lable
$ ps axZ
17. pstree(프로세스 트리) |
1) 경로 : /usr/bin/pstree
2) 요약 : 프로세스의 상관 관계를 트리 형태로 출력
3) 사용 방법 : pstree [옵션] [ pid | user ]
4) 옵션
-a : 지정한 인수까지 출력
-c : 중복된 프로세스를 모두 출력. 기본 설정값은 트리 내의 동일한 프로세스를 하나의 프로세스로 출력하고, 중복된 프로세스의 수를 출력
-G : VT100 형태의 트리로 출력
-h : 현재 프로세스와 부모 프로세스를 하이라이트 형태로 출력
-H pid : 지정한 프로세스 id(pid)의 프로세스와 부모 프로세스를 하이라이트 형태로 출력
-l(엘) : 긴 라인을 모두 출력
-n : PID를 기준으로 정렬하여 출력
-p : PID가지 출력
-u : UID를 출력
-U : UTF-8(유니코드) 형태로 출력
-V : 버전 정보를 출력
pid : 지정하는 pid를 출력
user : 지정한 사용자의 프로세스 정보를 출력
5) 추가 설명
pstree 명령어는 프로세스 간의 부모 자식 관계를 트리 형태로 출력하여 프로세스의 계층 관계를 이해하기 쉽습니다. 아래의 pstree 출력 그림을 통해 모든 프로세스는 init에서 생성된 자식 프로세스라는 것을 알 수 있습니다. 그 중에서 dhclient 프로세스는 NetworkManager의 자식 프로세스로 생성되었습니다. 이와 같이 pstree 명령어는 시스템에 실행 중인 모든 프로세스를 트리 형태로 계층화 합니다.
$ pstree
init----------NetworkManager-----------dhclient
| |-----{NetworkManager}
|
|-----acpid
|-----atd
|-----avahi-daemon----------avahi-daemon
|-----bonobo-activati----------{bonobo-activat}
|-----clock-applet
|-----console-kit-dae----------63*[{console-kit-da}]
... 생략 ...
18. renice(우선 순위 변경) |
1) 경로 : /usr/bin/renice
2) 요약 : 실행 중인 프로세스의 우선 순위를 변경
3) 사용 방법 : renice 우선권 [옵션] [프로세스]
4) 옵션
+num : 현재 프로세스의 우선권을 지정한 수(num)만큼 우선 순위를 낮춤
-num : 현재 프로세스의 우선권을 지정한 수(num)만큼 우선 순위를 높임
-g, --pgrp : 그룹 ID를 지정
-u, --user: 사용자 ID를 지정
-p, --pid : 프로세스 ID를 지정
5) 추가 설명
renice 명령어는 하나 이상의 실행 중인 프로세스의 우선 순위를 변경합니다. renice 명령어의 옵션으로 프로세스 ID, 프로세스 그룹 ID, 사용자 ID를 지정할 수있습니다. renice에 프로세스 그룹을 지정하면 그룹에 속한 모든 프로세스의 스케쥴링 우선 순위를 변경합니다. renice에 사용자를 지정하면 사용자에게 속한 프로세스들의 스케쥴링 우선 순위를 변경합니다. 이 때 실행한 명령에 영향받은 프로세스는 프로세스 ID에 한정됩니다.
아래는 프로세스 ID 987번과 사용자 daemon과 root 소유의 프로세스 ID 32번을 우선순위 +1로 변경합니다.
$ renice +1 987 -u daemon root -p 32
PRIO_MIN과 PRIO_MAX는 각가 -20과 20입니다.
사용자는 0에서 PRIO_MAX까지, 슈퍼 유저는 PRIO_MIN에서 PRIO_MAX까지 변경할 수 있습니다.
'IT 이야기 > Linux 명령어' 카테고리의 다른 글
[RHEL6] 프로세스 관리 명령어 6탄(time, tload, top) (0) | 2020.05.13 |
---|---|
[RHEL6] 프로세스 관리 명령어 5탄(slabtop, strace, taskset, telinit) (0) | 2020.05.13 |
[RHEL6] 프로세스 관리 명령어 3탄(mkfs, nice, nohup, pidof) (0) | 2020.05.12 |
[RHEL6] 프로세스 관리 명령어 2탄(kill, killall, lockfile, lsof, mkfifo) (0) | 2020.05.12 |
[RHEL6] 프로세스 관리 명령어 1탄(fuser, init, ionice, ipcrm, ipcs) (0) | 2020.05.08 |
댓글