(Week 2 - Day 4) - (1/2)

Program vs Process

Program

- Disk에 저장되어 있는 실행파일 App을 Program이라고 한다.

- 윈도우에서는 exe가 해당

- 실행된 Program은 메모리에 적재된다.

Process

- 메모리에 적재된 프로그램을 Process라는 단위로 커널이 관리

- Program을 실행시켜서 메모리에 적재된 것을 Process라고 한다.

 

Daemon

- 커널이 실행하는 백그라운드 프로세스

? = daemon

Thread

- 프로세스는 반드시 하나 이상의 Thread를 가진다.

- Thread = 프로세스 내에서 실행되는 작업의 단위

 

프로세스 상태 확인

uptime

load average : 부하 평균

-1min 5min 15min 까지의 평균 부하를 표시한다.

- cpu가 2개면 2.00이 100%이다.

- 만약 100%가 초과될 시, 실행은 되지만 대기시간이 걸리고 느려진다.

ps

현재 시점의 정적인 데이터

top

중요!

- 윈도우의 작업관리자와 유사하다. -> 실시간 데이터 상황

- 일반적으로 2초에 한번씩 상태 갱신을 한다.

VIRT : virtualize, 가상메모리

SHR(share) : 공유하는 것(ex. 복붙할 때 사용되는 클립보드와 유사)

RES : 물리 메모리

%CPU : cpu 사용률

$MEM : 메모리 사용률

 

KiB != kB

i가 붙으면 2진수 단위(1024^), 없으면 10진수 단위(1000^)이다.

참고로 KB가 아니라 kB(소문자)이다.

표시는 10진수이더라도 관습적으로 2진수 단위를 사용한다.

프로세스 신호

소위 말하는 interrupt이다.

프로세스에게 특정 신호를 보내서 프로세스가 interrupt를 받는다고 한다.

신호 번호 신호 이름 기능
1 HUP 예전에 전화선을 사용할 때, 전화를 끊을 때 사용
현재는 일반적인 종료
2 INT
(Ctrl + C)
키보드 인터럽트
3 QUIT 키보드 종료 및 덤프 생성
덤프 : 분석 정보 같은 것
9 KILL 즉각적인 강제적 종료
다른 DB연결되었거나 파일을 열거나 하고 있을때 
무조건 종료해버리면 정상적으로 리소스가 반환되지 않아 
문제가 발생한다.
15 TERM 정상적인 종료
가능하면 이걸로 종료하는 것이 이상적이다.
보통 정말 안된다면 최후의 방법으로 9번을 쓴다.
(1,2,3,15의 차이는 크게 없다.)
18 CONT 다시 시작
19 STOP
(Ctrl + z)
중지
20 TSTP 중지

Kill

- 단일 프로세스에 신호 전달

Killall

- 하나 이상의 프로세스에 신호 전달

kill 명령어는 정확하게 pid를 기입해서 사용하는 것이 좋다.

pgrep

- process grep

- 프로세스 이름을 지정해서 프로세스 아이디를 찾을 수 있다.

 

EX.

pgrep sleep

kill -15 'pgrep sleep'

- ' '안에 들어간 것은 명령어이다.

프로세스 우선순위

(PR(priority) - 높 / NI(nice) - 낮)

스케쥴러에 따라 다른 프로세스에 비해 많이 할당
순위
RT(real time) -99 ~ 39 
- 사람은 음수로 세팅 못함(음수는 커널의 영역)
- 별도로 조절 안하면 보통은 20
- NI 값만 조절 가능(-20 ~ 19 / 20을 0으로 설정)
- 음수로 갈수록 친절하지 않다.

 

실습

내용 : 프로세스 우선순위 바꾸기

조건 : tmux 활용

sleep 100&
nice sleep 100&
nice -n 5 sleep 100&  # 5로
nice -n 19 sleep 100& # 19로
#renice nice값 조정
renice -n10 -p 10561 # 10561의 프로세스의 nice값을 10으로 조정하겠다.
# 높이는건 관리자만 가능하다.
sudo renice -n0 -p 10561
복사했습니다!