티스토리 뷰
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는 더 이상 프로세스에서 확인되지 않는다. |
'운영체제 > CentOS 강좌' 카테고리의 다른 글
CentOS 강좌 PART 1. 8 스토리지 관리 LVM (1) | 2019.03.14 |
---|---|
CentOS 강좌 PART 1. 7 네트워크 구성 (0) | 2019.03.08 |
CentOS 강좌 PART 1. 5 사용자 권한 (0) | 2019.03.07 |
CentOS 강좌 PART 1. 4 리눅스 기본 명령어 3편 (0) | 2019.03.06 |
CentOS 강좌 PART 1. 3 리눅스 기본 명령어 2편 (0) | 2019.03.06 |
공지사항