[RHEL6] 프로세스 관리 명령어 4탄(pmap, ps, pstree, renice)
본문 바로가기
IT 이야기/Linux 명령어

[RHEL6] 프로세스 관리 명령어 4탄(pmap, ps, pstree, renice)

by 찬찬이 아빠 2020. 5. 13.
반응형
  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까지 변경할 수 있습니다.

반응형

댓글