티스토리 뷰

CentOS 강좌 PART 1. 6 시스템 프로세스와 자원


리눅스는 기본적으로 멀티 태스킹을 지원하기 때문에 필요에 따라서, 시스템의 프로세스와 자원(메모리, 디스크, 네트워크)에 대한 관리가 필요하다.
CentOS에서 제공되는 다양한 도구들로 시스템 프로세스 및 메모리 등의 자원관리를 살펴본다.

[리눅스 프로세스 정보] 
PID (Process ID)
프로세스 시작 시 할당되는 프로세스 식별 번호
UID (User ID)
프로세스를 소유하는 User 계정을 식별하는 번호
프로세스에 대한 사용자 권한을 파악할 수 있음.
GID (Group ID)
그룹 식별 번호. 프로세스가 속해 있는 그룹을 표시


리눅스 시스템 자원 모니터링을 위한 도구 ps 명령어 요약

ps -aux
자원활용률에 대한 확인
ps -ef
프로세스 리스트 출력
ps -axjf
프로세스 연관관계 Tree 출력
ps -U userid u
특정 사용자 계정의 자원활용정보 출력

리눅스 시스템 자원 사용률의 확인.

[whchoi@CentOS153 ~]$ ps -aux | less
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
whchoi   17785  0.0  0.0 158864  2468 ?        S    14:41   0:00 sshd: whchoi@pts/0

# ps 명령은 시스템 자원의 활용률을 확인 할 수 있음.
# -a 옵션은 모든 사용자의 프로세스 상태를 출력.
# -u 옵션은 프로세스를 사용한 사용자 정보와 프로세스의 실행시간을 출력.
# -x 옵션은 화면에 출력되지 않는 프로세스까지 모두 출력.

# USER - 소유 계정
# PID - 프로세스 식별 번호
# %CPU - CPU 점유율
# %MEM - 메모리 점유율
# VSZ - 가상메모리 크기
# RSS - 실제 메모리 크기
# TTY - 프로세스가 시작되고 있는 터미널 정보
# STAT - 현재 상태
R(Runable) : 실행 대기 상태.
S(Sleeping) : 수면 상태.
D(in Disk wall) : 입.출력을 기다리는 상태.
T(sTopped) : 멈춰있거나 흔적이 남아 있는 상태.
Z(Zombie) : 좀비상태.
# START - 시작 시간
# TIME - 총 사용 시간
# COMMAND - 프로세스를 실행한 명령

리눅스 프로세스 리스트 출력 확인.

[whchoi@CentOS153 ~]$ ps -ef | less
UID        PID  PPID  C STIME TTY          TIME CMD
whchoi   21620 21618  0 15:59 pts/1    00:00:00 -bash

# -ef 옵션을 통해 프로세스 목록을 출력
# UID : 사용자 계정
# PID : 프로세스 식별번호
# PPID : 부모프로세스 식별번호
# C : CPU
# STIME : 프로세스가 시작된 시간
# TTY : 프로세스가 시작되고 있는 터미널
# TIME : 총 사용 시간
# CMD - 프로세스를 실행할 명령

기타 유용한 ps 명령어 세트

[whchoi@CentOS153 ~]$ ps -axjf | more
PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    1  6105  6105  6105 ?           -1 Ss       0   0:00 /usr/sbin/sshd -D
6105 17779 17779 17779 ?           -1 Ss       0   0:00  \_ sshd: whchoi [priv]
17779 17785 17779 17779 ?           -1 S     1000   0:00  |   \_ sshd: whchoi@pts/0
17785 17786 17786 17786 pts/0    17786 Ss+   1000   0:00  |       \_ -bash
6105 21613 21613 21613 ?           -1 Ss       0   0:00  \_ sshd: whchoi [priv]
21613 21618 21613 21613 ?           -1 S     1000   0:00  |   \_ sshd: whchoi@pts/1
21618 21620 21620 21620 pts/1    22777 Ss    1000   0:00  |       \_ -bash
21620 22777 22777 21620 pts/1    22777 S+    1000   0:00  |           \_ man ps
22777 22786 22777 21620 pts/1    22777 S+    1000   0:00  |               \_ less -s
6105 23796 23796 23796 ?           -1 Ss       0   0:00  \_ sshd: whchoi [priv]
23796 23802 23796 23796 ?           -1 S     1000   0:00      \_ sshd: whchoi@pts/2
23802 23803 23803 23803 pts/2    23838 Ss    1000   0:00          \_ -bash
23803 23838 23838 23803 pts/2    23838 R+    1000   0:00              \_ ps -axjf
23803 23839 23838 23803 pts/2    23838 S+    1000   0:00              \_ more

# -axjf 옵션을 통해 process의 연관관계 tree를 출력

[whchoi@CentOS153 ~]$ ps -u whchoi u  
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
whchoi   17785  0.0  0.0 158864  2468 ?        S    14:41   0:00 sshd: whchoi@pts/0
whchoi   17786  0.0  0.0 115548  2152 pts/0    Ss+  14:41   0:00 -bash
whchoi   21618  0.0  0.0 158864  2472 ?        S    15:59   0:00 sshd: whchoi@pts/1
whchoi   21620  0.0  0.0 115548  2152 pts/1    Ss   15:59   0:00 -bash
whchoi   22777  0.0  0.0 119136  1840 pts/1    S+   16:22   0:00 man ps
whchoi   22786  0.0  0.0 110308   968 pts/1    S+   16:22   0:00 less -s
whchoi   23802  0.0  0.0 158864  2472 ?        S    16:43   0:00 sshd: whchoi@pts/2
whchoi   23803  0.0  0.0 115440  2100 pts/2    Ss   16:43   0:00 -bash
whchoi   24169  0.0  0.0 155360  1876 pts/2    R+   16:49   0:00 ps -u whchoi u

# -u 옵션을 통해 특정 사용자 계정의 자원 사용 현황을 출력.


top 기반의 시스템 자원 활용 모니터링

ps보다 더욱 활용도가 높은 시스템 자원 모니터링 도구가 top 명령이다.
top 는 동작 중인 프로세스의 상태, CPU , 메모리, 시스템부하를 실시간으로 화면에 출력하여 준다.to
ptopc 
[whchoi@CentOS153 ~]$ top
top - 19:26:56 up 1 day, 18:59,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 155 total,   1 running, 154 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.0 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8009508 total,  6971604 free,   228060 used,   809844 buff/cache
KiB Swap: 16777212 total, 16777212 free,        0 used.  7425596 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
14009 whchoi    20   0  162016   2312   1588 R   0.3  0.0   0:00.03 top    

##############################################
# 실행시 사용되는 주요 명령과 옵션
# top를 통해 실시간으로 시스템 자원을 모니터링
# -d 옵션 : 화면 Refresh delay 초단위 설정
# -u 옵션 : 사용자 계정 소유의 프로세스 출력
# -c 옵션 : 주요 지표를 강조

##############################################
# 실행 이후 주요 키 값.
# Shift + P : CPU 사용률 정렬
# Shift + M : Memory 사용률 정렬
# Shift + T : 실행 시간이 오래된 순서로 정렬
# Shift + B : 주요 값들 강조
space bar : refresh
# d 입력 후 딜레이 값 입력 : 입력한 딜레이 값에 따라 refresh
u 입력후 사용자이름 입력 : 사용자 소유의 프로세스 표시
k 입력후 PID 입력 : pid 에 해당하는 프로세스 종료
B : 상단정보 및 running 프로세스 정보를 bold로 표시/해제
b : running 프로세스 정보를 하이라이트하여 표시/해제
x : b 또는 B 로 표시할때 colum 하이라이트 표시/해제
y : b 또는 B 로 표시할때 row 하이라이트 표시/해제
R : 정렬 변경 (오름차순/내림차순)
# z : 컬러/모노 표시
c : 명령줄 표시/해제
l : load average 줄 표시/해제
t : task cpu states 줄 표시/해제
m : memory 줄 표시/해제
i : idle 프로세스 표시/해제
H : thread 표시/해제
o : 항목 내용 표시 순서 변경(항목에 대한하는 알파벳(대/소문자)로 순서 변경)
q : 종료 

################################################
# 출력 결과값
# 첫번째 라인
현재 시간 : 19시 26분 56초
서버 구동 시간 :  1일 18시간 59분
현재 사용자 : 2
평균 부하 : 1분 , 5분, 15분
# 두번째 라인
프로세스 상태 : 전체, 실행중, 유휴, 정지, 좀비
# 세번째 라인 : CPU 상태
# 네번째 라인 : 메모리 상태
# 다섯번째 라인 : swap memory 상태
# 여섯번째 라인 : 프로세스 상태
PID : 프로세스 ID
USER : 소유자 계정
PR : 우선순위
NI : nice 우선순위
VIRT : 가상 메모리 사용량
RES : 실제 물리 메모리 사용량
SHR : 공유 메모리 사용량
S : 프로세스 상태

[프로세스 실행과 종료]

포그라운드 (Foreground Process)

포그라운드는 명령을 실행하여 프로세스가 종료 될 때까지 터미널에 대한 제어권을 가지고 동작하는 모드를 말한다.
쉽게 이야기하면, 터미널에서 해당 명령에 대한 결과가 종료될때까지 다른 프로세스가 터미널 제어권을 가지지 못한다는 의미로 해석이 된다.
또한 이에 대한 제어권을 가지고 있는 프로세스 그룹을 포어 그라운드 프로세스 그룹이라도 한다.
터미널에서 실행 중인 프로세스의 일시정지는 "Ctrl" + "Z"로, 프로세스 중단은 "Ctrl" + "C"로 시그널을 보낸다.

백그라운드 (Background Process)

터미널에 대한 제어권 없이 백그라운드에서 동작하는 모드를 말한다.
백그라운드로 프로세스가 동작하기 때문에 터미널에서는 다른 프로세스로 명령을 수행할 수 있다는 의미로 해석된다.
제어권이 없는 프로세스 그룹들을 백그라운드 프로세스 그룹이라고 한다.
백그라운드를 실행하기 위해 특수문자 & 를 사용한다.pc 
백그라운드 실행 중인 프로세스를 확인하기 위해서는 "jobs" 명령을 통해 확인이 가능하다.

[whchoi@CentOS153 ~]$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=39 time=91.8 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=39 time=91.5 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=39 time=91.5 ms
^Z
[1]+  Stopped                 ping 8.8.8.8

# 포그라운드 프로세스를 시험
# 터미널에 ping을 실행시킨다.
# 실행 중 "Ctrl" + "Z" 를 통해 프로세스를 백그라운드로 변경한다.

[whchoi@CentOS153 ~]$ jobs
[1]+  Stopped                 ping 8.8.8.8
# jobs 명령을 통해 보면, 실제 터미널에 출력되지 않을 뿐 프로세스는 대기 상태이다.

[whchoi@CentOS153 ~]$ fg %1
ping 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=4 ttl=39 time=91.6 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=39 time=91.6 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=39 time=91.5 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=39 time=91.5 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=39 time=91.6 ms
^C
--- 8.8.8.8 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 29445ms
rtt min/avg/max/mdev = 91.515/91.637/91.880/0.355 ms

# 백그라운드 프로세스를 포어 그라운드로 실행하기 위해 jobs의 백그라운드 넘버를 확인한다.
# fg %n 명령을 통해 bg 로 호출하여 프로세스를 백그라운드에서 실행한다.
# 백그라운드에서의 종료는 일반 프로세스 중단과 동일하게 "Ctrl" + "C"를 실행한다.

[whchoi@CentOS153 ~]$ ping 8.8.8.8 &
[1] 17233
64 bytes from 8.8.8.8: icmp_seq=1 ttl=39 time=91.7 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=39 time=91.5 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=39 time=91.8 ms

# 백그라운드 프로세스를 시험
# 터미널에 ping을 실행시킨다. 이때 "&" 옵션을 통해 백그라운드로 동작시킨다.

[whchoi@CentOS153 ~]$ jobs
[1]+  Running                 ping 8.8.8.8 &
# jobs를 통해 백그라운드로 실행하는 ping 명령을 확인한다.

[whchoi@CentOS153 ~]$ fg %1
ping 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=31 ttl=39 time=91.5 ms
64 bytes from 8.8.8.8: icmp_seq=32 ttl=39 time=91.5 ms
64 bytes from 8.8.8.8: icmp_seq=33 ttl=39 time=92.1 ms
^Z
# fg %n 명령을 통해 백그라운드 프로세스를 포어그라운드로 변경.
# 프로세스 잠시 중지는 동일하게 "Ctrl" + "Z" 로 멈춘다.

[whchoi@CentOS153 ~]$ fg %1
ping 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=34 ttl=39 time=92.0 ms
64 bytes from 8.8.8.8: icmp_seq=37 ttl=39 time=91.6 ms
64 bytes from 8.8.8.8: icmp_seq=38 ttl=39 time=91.6 ms
^C
# "Ctrl" + "C" 로 포어그라운드를 종료한다.

[ 프로세스 종료]

실행 중인 프로세스를 종료하는 명령은 "kill"을 통해 수행한다.
kill 을 수행하기 위해서는 앞서 소개한 ps -ef 또는 top 를 통해 PID를 확인하여 종료할 수 있다.
강제 종료는 대부분 "kill -9" , "kill -SIGKILL" 명령을 통해 프로세스를 종료한다.

[whchoi@CentOS153 ~]$ kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM

# kill 옵션은 여러가지가 있다.
# 이 가운데 일반적인 종료는 "15 SIGTERM", 강제 종료는 "9 SIGKILL"을 사용
# 프로세스만 Restart하기 위해서는 "1 SIGHUP"을 사용.

[whchoi@CentOS153 ~]$ ps aux | grep whchoi
root      9974  0.0  0.0 158864  5540 ?        Ss   18:55   0:00 sshd: whchoi [priv]
whchoi    9980  0.0  0.0 159016  2468 ?        S    18:55   0:00 sshd: whchoi@pts/0
whchoi    9981  0.0  0.0 115552  2228 pts/0    Ss   18:55   0:00 -bash
root     17635  0.2  0.0 158864  5540 ?        Ss   20:41   0:00 sshd: whchoi [priv]
whchoi   17641  0.0  0.0 158864  2324 ?        S    20:41   0:00 sshd: whchoi@pts/1
whchoi   17642  0.0  0.0 115436  2052 pts/1    Ss   20:41   0:00 -bash
whchoi   17665  0.0  0.0 128440  1272 pts/1    S+   20:41   0:00 ping 8.8.8.8
whchoi   17725  0.0  0.0 155360  1884 pts/0    R+   20:42   0:00 ps aux
whchoi   17726  0.0  0.0 112712   980 pts/0    S+   20:42   0:00 grep --color=auto whchoi

# 1번 터미널에서 실행 중인 ping 을 확인한다.
# Ping을 수행 중인 PID는 17665 번이다.

[whchoi@CentOS153 ~]$ kill -15 17665
# kill -15 를 통해 PID 17665를 종료 시킴

64 bytes from 8.8.8.8: icmp_seq=820 ttl=39 time=91.7 ms
64 bytes from 8.8.8.8: icmp_seq=821 ttl=39 time=91.6 ms
Terminated
[whchoi@CentOS153 ~]$
# 터미널 2번에서 PING 실행 중에 갑자기 종료 된다.

[whchoi@CentOS153 ~]$ ps aux | grep whchoi
root      9974  0.0  0.0 158864  5540 ?        Ss   18:55   0:00 sshd: whchoi [priv]
whchoi    9980  0.0  0.0 159016  2468 ?        S    18:55   0:00 sshd: whchoi@pts/0
whchoi    9981  0.0  0.0 115552  2232 pts/0    Ss   18:55   0:00 -bash
root     17635  0.0  0.0 158864  5540 ?        Ss   20:41   0:00 sshd: whchoi [priv]
whchoi   17641  0.0  0.0 158864  2324 ?        S    20:41   0:00 sshd: whchoi@pts/1
whchoi   17642  0.0  0.0 115436  2104 pts/1    Ss+  20:41   0:00 -bash
whchoi   18357  0.0  0.0 155360  1884 pts/0    R+   20:55   0:00 ps aux
whchoi   18358  0.0  0.0 112712   980 pts/0    R+   20:55   0:00 grep --color=auto whchoi

# 터미널 1에서 실행 중인 PID 17665 PING는 더 이상 프로세스에서 확인되지 않는다.


공지사항