본문 바로가기

os/linux

[Linux] 프로세스 상태 확인 및 제어

[Linux] 프로세스 상태 확인 및 제어

 

안녕하세요. 심심한 코딩쟁이입니다.

 

오늘은 리눅스의 프로세스 제어를 다뤄보겠습니다.

 

프로세스라는 말을 들어보셨나요?

 

이번 시간에 프로세스에 대해 알아보고 리눅스에서는 어떻게 제어하는지도 살펴봅시다.

 

Linux-logo
리눅스 로고


프로세스란?

 

프로그램이 실행되어 메모리에 로드된 상태를 프로세스라고 합니다.

 

프로세스에는 부모, 자식 프로세스가 존재합니다.

 

  • 부모 프로세스 : 자식 프로세스를 생성해 작업 실행
  • 자식 프로세스 : 부모 프로세스에 의해 생성되고 작업이 완료되면 자원 릴리즈(반환)

프로세스 중 데몬이라고 불리는 것은 백그라운드에서 동작되고 있는 프로세스를 의미합니다.

 

그리고 프로세스 내에서 실행되고 있는 작업의 단위를 스레드라고 부릅니다.

 

프로세스와 관련된 용어는 이 정도로 설명하고 프로세스를 직접 다뤄봅시다.


포그라운드 (ForeGround) & 백그라운드 (BackGround)

 

포그라운드와 백그라운드는 언어상 의미 그대로 프로세스가 앞에서 (터미널 화면에) 동작하고 있느냐 또는

 

뒤에서 (터미널 화면에는 보이지 않음) 동작하고 있느냐를 의미합니다.

 

다음 예시를 보면서 포그라운드와 백그라운드를 이해해 봅시다.

 

# sleep 1000 을 백그라운드에서 실행 (& 을 붙이면 백그라운드에서 실행됨)
$ sleep 1000 &

# 백그라운드 작업 확인
$ jobs

# 포그라운드로 작업 옮기기(%뒤에 숫자는 jobs으로 확인한 프로세스의 순서)
$ fg %1

# 포그라운드에서 진행중인 작업을 백그라운드로 옮기기
# 터미널에서 Ctrl+z 를 사용해 작업을 일시중지
$ ^z 
$ bg %1

# ps 명령어로 프로세스를 확인해보면 sleep 명령어가 실행되고있음을 확인
$ ps

 

process-ex-1
포그라운드 백그라운드

 

포그라운드에서 sleep 명령어가 실행되고 있을 때는 설정한 초가 끝나기 전에 다른 명령어를 입력할 수

 

없기에 Ctrl + z 를 사용해 일시중지 후에 백그라운드로 옮겨야 합니다.

 


프로세스 상태 확인 방법

 

현재 내 os에서 실행되고 있는 프로세스를 살펴보기 위해서는 다음 명령어들을 활용할 수 있습니다.


ps

 

 

 

ps 명령어를 실행하는 순간의 프로세스들의 상태를 출력해 줍니다.

 

ps-ex-1
ps 명령어


uptime

 

부하 평균을 출력하는 명령어

 

1분, 5분, 15분에 대한 부하 평균을 출력해 줍니다.

 

부하 평균값이 1이 넘어가는 것은 프로세스가 리소스를 할당받기 위해 대기시간이 생김을 의미합니다.

 

uptime-ex-1
uptime 명령어


top

 

동작중인 프로세스들의 상태를 실시간으로 확인 가능 (종료 : q)

 

top-ex-1
top 명령어


 

w

 

부하 모니터링

 

w-ex-1
w 명령어



프로세스 아이디 (PID)

 

프로세스 아이디는 말그대로 프로세스의 ID를 의미하며 각 프로세스별로 가지고 있는 고유한 번호입니다.

 

PPID란 것도 존재하는데 이것은 부모 프로세스의 PID를 의미하며 ps 명령어에 -l 옵션을 붙여주면 확인할 수 있습니다.

 

ps-ex-2
ps -l 명령어

 

위 그림을 살펴보면 bash 프로세스의 PID가 1441일 때 sleep과 ps 프로세스의 PPID가 1441 임을 볼 수 있습니다.

 

bash 쉘(PID : 1441) 에서 sleep과 ps 명령어를 실행했기 때문에 부모 프로세스는 bash (PID : 1441) 가 됩니다.


프로세스 신호

 

프로세스를 다룰 때 사용되는 다양한 신호들을 살펴봅시다.

 

번호 이름 설명
1 HUP 프로세스 종료 없이 구성파일 리로드
2 INT 키보드 인터럽트
3 QUIT 키보드 종료 및 덤프 생성
9 KILL 강제적인 종료
15 TERM 정상적인 종료
18 CONT 중지된 프로세스 다시 시작
19 STOP 프로세스 동작 중지
20 TSTP 프로세스 동작 중지

 

위에서 살펴본 신호를 전달하는 명령어들을 살펴봅시다.

 


kill

 

일반적으로 kill 명령어에는 1번(연결끊고 구성파일 리로드)과 9번(프로세스 강제 종료) 신호를 주로 사용합니다.

 

kill 명령어 구조

kill -[신호번호] [pid]

 

kill-ex-1
kill 명령어


killall

 

명령어의 언어상의 의미 그대로 지정한 이름으로 실행되고 있는 프로세스들에 신호를 보냅니다.

 

killall 명령어 구조

killall -[신호번호] [프로세스이름]

 

killall-ex-1
klillall 명령어


pgrep

 

ps 명령어와 grep 명령어를 합친 명령어입니다.

 

# 프로세스 내용에 sl 이 포함된 작업을 번호로 출력
$ pgrep sl

# 프로세스 내용에 sl 이 포함된 작업을 리스트로 출력
$ pgrep -l sl

# symxsym 사용자가 실행시킨 프로세스 중 내용에 sl 이 포함된 작업을
$ pgrep -l -u symxsym sl

 

pgrep-ex-1
pgrep 명령어

 


pkill

 

pkill 명령어는 프로세스 이름을 지정해 해당 이름을 가진 모든 프로세스를 종료하는 명령어입니다.

 

pkill-ex-1
pkill 명령어



오늘은 리눅스 프로세스의 기본적인 개념과 제어에 대해서 살펴보았습니다.

 

궁금하신 점이나 어려웠던 부분이 있으실 경우 댓글로 남겨주시기 바랍니다.

 

성심성의껏 답변드리겠습니다.

 

요즘 기온이 점점 올라가는 것 같습니다.

 

날이 따뜻해지면 몸도 늘어지기 마련이므로 기운 내서 으쌰으쌰 하시길 바랍니다.

 

감사합니다.

반응형