딩굴댕굴

Linux - 21. 프로세스 관리

by jennysgap

BOX

프로세스 기본적이 개념

메모리 4단계

화면 (결과값을 출력)

REM > L2Cache > register > frame buffer

REM (4KB = 페이지)


페이징

- REM 에서 L2cache 넘어가고 계산할 때는 거꾸로 가는 상황

- in 프로세스가 들어옴

- out 프로세스가 아예꺼짐 (나감, 퇴출)


메모리를 사용할 때는 무조건 우선순위 (priority)가 발생한다.

우선순위에 따라 cpu를 사용할 수 있는 권한들이 생긴다.

우선순위가 없으면 실행이 안됨. PID 값이랑은 상관없음 (PID =/= priority)

우선순위는

1. 들어오는 순서 (일반 유저 모드)

2. 프로그램 자체가 중요할 경우 (왕자 모드 - 태생부터 귀족 ㅋㅋㅋ) 

(위 두가지 모두 사용한다.)


interrupt

- 내가 실행 하려고 했는데, 나보다 높은 우선순위가 나타남 그러면 급 정지 모드

- 대기...... 를 당할 수 있다. ---> wating 상태

- 계속 반복될 경우 kill 당함 , end


프로세스 보는 법

#  ps -elf | more

- e : 길게

- l  : long 더 길게

- f : 자세하게


프로세스 정보가 존재하는 디렉터리

 #  ls /proc


프로세스 선택해서 보기

 #  ps -ef | grep [넘버나 프로세스 이름]

 #  ps -ef | grep 17


서버용 프로그램은 우선순위가 낮은 경우가 많음.

SZ : size 정보 (bite) 1조각 사이즈 (필요한 부분, 일부만 올림) 

      그렇다면 진짜 사이즈가 이거일까? nope

공격할 때, 사이즈를 봄.  상주하는 크기는 원래 크기보다 클 수 없음

토탈 사이즈 까지만 커질 수 있음.  그러한 프로그램은 나중에 분석을 해야함

S : sleepping 상태


프로세스 종료 방법

 1. kill 명령 

# kill  [-option, -signal]  PID

# kill  -l                 : 현재 사용중인 시그널 보기

* 시그널은 작업을 위해 전달되는 신호형태를 의미하며, 리눅스에는 64개의 시그널을 사용함.

# kill  -15  PID         : 해당 시그널한테 15를 부여

# kill  -KILL  PID : -KILL 이라는 시그널을 부여

* 프로세스 제거에 사용되는 시그널 : 3, 9, 15, 1

[주의!]  죽이는 것은 아니고, 죽도록 유도함 (결국 죽는건 프로세스 스스로) 

1 = 서버(구성정보 파일을 삭제) 일반 명령(구성정보가 없으니 그냥 프로세스 없애기)

     부재시간 줄이는 방법으로 사용함. - HUP : (이거랑 같은 의미)

15 = 정상적으로 죽여라. 지금 하고 있는 작업 다 끝내고 죽어라

3 = 오류날 확률이 있으나 참고


# sleep  100000 & --> 연습용 명령 (& 붙이는 이유, kill 명령 내릴 때 어떤 시그널로 죽였는지 나옴)

# sleep 1000000 &

# sleep 10000000 &

# sleep 100000000 &

# ps -df | grep sleep --> PID 확인

# kill -1 PID --> 끊어짐    # kill -HUP PID # kill -SIGHUP PID (왼쪽이랑 같은 의미)

# kill -3 PID --> 종료 (core dumped = 에러)

# kill -9 PID --> 죽었음

# kill -15 PID --> 종료됨


# ps -df | grep rsyslogd --> PID 확인

# kill -HUP PID

# ps -ef | grep rsyslogd --> 상위 출력과 PID 비교 (같음)


* 백그라운드인지 포그라운드인지 모르기 때문에 (jobs 명령어를 이용)

* ps 명령어에서는 확인 불가능 

# jobs

# jobs -l

# kill PID

# kill %1  (jobs 에 나오는 1번 죽임)


서버 같은 경우 명령 요청을 할 때, 클라이언트한테 요청을 받을 때 까지 일하지 않음 (데몬)

명령을 점유하기 때문에 다른 명령어를 사용할 수 없음. 그렇기 때문에 백그라운드를 사용함.

백그라운드 사용법 : 명령줄 맨 뒤에 '&' 입력

즉 백그라운드는 서버에서 수동으로 명령을 내릴 때 사용


* 포그라운드에서 백그라운드로 작업 전환!!!

서버에서 실수로 명령어를 내릴 때, sleep 100000 명령어에 '&'을 못붙임

이럴 경우, Ctrl + z 를 누르면 멈춤 (stopped)

그 후 bg %1 명령을 이용 하면 백그라운드 명령으로 전환됨


* 반대로도 할 수 있음

jobs 로 확인한 후 fg %1 백그라운드를 포그라운드로 전환!


* jobs 내용 분석

빈칸 : - 전에 이용했다는 의미 (이미 cpu는 사용했음)

- : + 전에 이용했다는 의미 (이미 cpu는 사용했음)

+ : 최근 사용 (이미 cpu는 사용했음)


top 명령어

- 시스템 관리로 많이 쓰는 명령어

- ps 명령어랑 비슷한 기능 (ps 대신 사용 가능)

- 전체 프로세스를 다 볼 수 있음 --> 실시간 모니터링 가능

- 단, 터미널 폭에 들어 가는 만큼 보여줌

- ps 명령어는 상태가 만들어지고 죽는 상황을 알 수 없음

- 그러므로 top 명령어가 나오게 됨

# top

# top -u oracle /* 해당 사용자의 프로세스 정보를 실시간 모니터링 */

# top -p PID1,PID2,PID3 /* 해당 번호의 프로세스 정보를 실시간 모니터링 */


* top 분석

- 전체 CPU 사용량이 정확하게 나옴

- us : user 명령어를 입력하고 출력하기 까지의 권한 (로딩하고 출력하기까지 메모리 할당)

- sy : system time, kenel이 이용하는 시간 

- idle time : 작업을 하지 않는 노는 시간

- mem : 메모리, used 사용량, free 사용하지 않은 양, buffer 뭐라고 했지?

- swap : 하드디스크에 공간이 많으니까, 남은 공간을 메모리로 쓰자. 라는 의미 (추가메모리)

      하드디스크의 일정 공간을 메모리에 빌려주는 것.

       메모리 남는 공간을 파일을 올리고 적제한다. 메모리 사용률이 거의 100% 차있는 경우가 많다.

      free 는 사용하지 않는 다는 것이 아니라 프로그램이 올라가지 않은 공간이라고 본다.

 - total tasks : 현재 돌아가는 프로세스 몇 개야?

               프로세스 상태들 ( running, sleeping, stopped, zombie )

               zombie - 사용자의 명령을 받을 수 없는 상태

 - load average : 메모리에 로딩을 시킬 때, 어느정도 부하가 걸리고 있는가? (5분전까지의 상황, 10분전, 15분전)

 - users : 현재 로그인이 된 사용자


# renice [-/+PRI] PID

# renice -5 PID :  기본 우선 순위를 5단계 상향

# renice +5 PID :  기본 우선 순위를 5단계 하향

# renice  0  PID :  기본 우선 순위 복귀

* 조정될 PRI는 -19 ~ +19까지 사용 가능. (총 20단계만 조정할 수 있음)



VIRT : virture

RES : resident 알이에스

SHR : 

S : sleep 자고 있는 상태


%CPU : 전체에서 사용률

%MEMM : 전체에서 사용률

TIME+ : 최종 돌아간 시간 정보, 단위 시간 정보


스레드는 ps를 못잡음 


Top 명령 보는 방법 TIP!

- 점유율 (점유율 높으면 우선순위가 높음)

- 점유율 --> PR --> NI 

- 일반 프로그램인데, 점유율이 너무 높다면 PR을 보고 NI에서 조정되었는지 확인 해보기!

- 일반 소프트웨어에서 가장 먼저 시작하는 번호는 16번임

- PID 나 명령이나 명령이나 PID 나 같은 의미다.


pstree

- ps -ef 하려면 다 맞춰서 찾아야 하죠. 이럴 때, 도식화 해서 보겠다 한다면 

- 누가 누굴 만들었구나 하는 것을 트리구조 형태로 볼 수 있음


ps -ef 단점

 - 커널에 관한 프로세스는 관찰 할 수 없음 (kenel 프로세스 프로그램)

 - 커널 자체에 영향이 가기 때문에 관찰 할 수 없음



반응형

'BOX' 카테고리의 다른 글

Linux - 23. System Log II  (0) 2016.12.07
Linux - 22. System Log I  (0) 2016.12.07
Linux - 20. 패키지 관리  (0) 2016.12.07
Linux - 19. 서비스 관리  (0) 2016.12.07
Linux - 18. Bootstrap(부팅의 단계)  (0) 2016.12.07

블로그의 정보

jennysgap

jennysgap

활동하기