OS/Linux

프로세스 관리 명령어 - 1

비뀨_ 2022. 9. 2. 11:32

프로세스(Process)는  실행중인 프로그램을 말한다.

 

보통 프로그램과 프로세스에 대해서 나중에 헷갈릴 수 있으니까 간단히 적자면

 

  • Program은 실행파일이다.
  • Program의 실행에 필요한 입력 데이터를 묶어서 Task라고 하는데 이 작업이 컴퓨터에서 실행시키게 되면 커널(kernel)에 등록되는데 커널에 등록된 작업을 프로세스라고 한다.

 

프로세스 정보 내용

 PID 고유의 Process의 ID 번호
 UID, GID 프로그램을 실행시킨 사용자
 프로세스 상태 실행중(R), 중지중(S), 종료불가한 중지상태(D), T-sttopped/traced, Z-zombie 등
 우선 순위 (C) Process의 우선 순위
 부모 프로세스 (PPID) 자신의 프로세스를 실행시킨 부모 프로세스

 

프로세스는 백그라운드와 포그라운드로 동작한다

  • 백그라운드(Background)
    • 명령어 뒤에 &를 입력하면 됨.
    • 프로세스를 실행시키면 실행을 시스템에게 넘기고 명령 대기상태로 다음 명령 기다림
    • 장기간 작업이 필요한 경우 필요함.
    • ps 명령어로 진행상태 확인할 수 있다.
  • 포그라운드(Foreground)
    • 쉘(Shell) 프롬프트에서 명령을 입력하고 Enter 치면 대부분 포 그라운드로 실행 됨.
    • 종료하고 싶을 시 Ctrl 과 C 를 누르면 됨.

 

프로세스 관리 명령어

 

 프로세스 상태 명령어 ps

ps는 Process Status 의 약자로 실행되고 있는 프로세스 상태를 화면에 출력하는 명령어다.


Background 프로세스가 잘못되어 무한 루프에 빠지거나 사용자가 수행중인 Background 프로세스를 강제로 중단해야될 때 해당 프로세스의 정보를 알아보는데 사용한다.

 

ps 명령어의 형식

 

  • ps 명령어를 잘 못 쓰면 도움말이 나오는데 simple, list 등의 명령어가 있는걸 확인할 수 있다.

ps 명령어만 쳤을 때

ps + [options] 의 형식으로 쓰며 옵션들은 아래와 같다.

  • -a : 다른 사용자에 의해 생성된 모든 프로세스 목록
  • -d : 프로세스 그룹의 reader를 제외한 모든 프로세스에 대한 정보
  • -e , -A : 시스템 내에서 실행중인 모든 프로세스 출력
  • -f : 프로세스에 관한 모든 자세한 정보를 출력

  • -l (알파벳 엘): 프로세스에 관한 정보를 자세히 출력

ps -f

  • -n namelist : 시스템 내의 namelist 파일의 이름을 지정

 

  • -u : 사용자 이름 등을 매우 자세히 출력

ps -u

  • -x : 제어 터미널을 갖고있지 않은 프로세스도 출력
  • -U [사용자 로그인명]: 지정한 사용자 ID 번호나 이름을 갖고 있는 프로세스에 관한 정보
    • ex : 사용자 명이 ubuntu면 ps -U ubuntu

 

개인적으로 자주 쓰는 명령어는 ps -ef 다.

 

ps -ef | grep java 형식으로 쓰는데 e와 f 를 합친 뜻이다.

해석하면 시스템 내에서 사용하는 모든 java라는 단어를 가진 프로세스를 찾아라 정도로 할 수 있겠다.

 

 

프로세스 종속관계 명령어 pstree

pstree 명령어 사용

pstree는 (display a tree of processes)는 현재 시스템에서 실행되고 있는 프로세스들을 종속 관계를 표현할 수 있도록 Tree 형태로 출력하는 명령어다.

 

간단하게 살펴보면 4번째 줄의 amazon-ssm-agen은 systemd의 자식이고, ssm-agent-worke를 자식으로 두고 있는 것을 살펴 볼 수 있다.

 

 

프로세스 실시간 상태 조회 명령어  top

 

top 명령어 ( display top CPU process) 는 현재 시스템에서 수행중인 프로세스의 진행 상태를 실시간으로 출력해 주는 명령이다. 이 명령어는 CPU 사용시간, 메모리 사용량, 프로세스의 상태, 우선순위 등의 정보를 제공한다.

 

형식 : top [options]

  • -d 갱신시간 : 모니터에 업데이트 시간 간격을 조정
  • -q 화면을 계속 갱신함.
  • - i idle 상태와 zombie 프로세스를 무시함.
항목 설명
PID Process ID
USER 소유자 
PR Priority (우선순위)
NI Nice Value ( -20 ~ 19 사이) : 작을수록 우선순위가 높아짐.
VIRT = SWAP + RES  가상이미지 ( 단위는 kb)
RES = CODE + DATA 상주메모리 사이즈 ( Resident size ) (단위 : kb )
SHR 공유 메모리 사이즈 ( 단위 : kb)
S 프로세스 상태 ( Status ) 
D : 휴지가가 없이 동작되는 상태. (Uninterruptiable sleep) 디스크 혹은 네트워크 I/O를 대기
R : 동작중인 상태
S : 휴식 상태 ( sleep)
T : 추적되어지거나 또는 멈춘 상태
Z : 좀비 ( Zombie ) 상태
%CPU CPU 사용 시간 퍼센트
%MEM 메모리 사용 퍼센트
TIME+ 프로세스가 시작해 CPU를 사용한 총 시간 ( 누적 사용 시간)
COMMAND 프로세스를 실행한 명령어 확인

실제로 top 명령어를 쳐보면 이렇게 나온다. 위의 표와 비교해서 확인해보면 좋을 것 같다.

top 명령어 안에서 사용할 수 있는 명령어

명령어 설명
SPACE 화면 갱신
h, ? 도움말을 출력
k k를 입력하고, PID를 입력하면 PID 값의 프로세스를 kill 명령으로 종료시킴
i Zombie, Idle 프로세스의 출력을 On/ Off 시킴
n 또는 # 출력한 프로세스의 수를 저장
q top 종료
r Nice 값을 변경
s 화면을 갱신하는 시간을 변경
F, f 보여줄 항목을 추가하거나 삭제
O, o 보여줄 항목의 순서 (order)를 바꿈
l top의 맨 윗줄 ( uptime )을 On/Off
m 메모리의 관련된 항목을 On/ Off
t 프로세스와 CPU 항목을 On/Off
c Command line의 옵션을 On/Off
M 프로세스의 RSS 값을 정렬
P %CPU 값으로 정렬
T Time 값으로 정렬
W 바꾼설정을 저장

 

 

프로세스 종료 명령어 kill, killall

 

kill 명령어는 말 그대로 프로세스를 죽이는 명령어이다. Background 에서 실행중인 프로세스나 nohup과 함께 실행되는 프로세스를 종료시킬 수 있다. (nohub과 백그라운드 실행이 뭔지 궁금하면 여기.)

  • 사용자는 자신 소유의 프로세스만 종료할 수 있다. 
  • ps 명령어로 PID를 알아내서 kill할 수 있다.
  • 기본적으로  시그널 숫자는 15번이며, 15번 이외의 번호는 시그널 번호 15를 무시하는 프로세스를 종료시키기에 유용.

kill -l 명령어를 쳐서 나온 시그널 번호

 

 

기본적인 용법은 kill [-시그널번호] [PID] 이다.

 

실습을 위해서 top& 명령어를 통해서 top을 백그라운드에서 실행시켜봤다.

ps -f

그리고 ps -f 명령어를 통해서 top의 PID가 19112인 걸 확인하고

kill -9 19112 명령어를 통해서 top의 프로세스를 강제 종료를 했다. 

-9를 쓴 이유는 위의 이미지에서 SIGKILL이 9이기 때문에 사용했다.

 

kill -9 19112 한 후 ps -f 명령어

kill 명령어 후 ps -f 로 다시 조회했을 때 프로세스가 종료된 걸 볼 수 있다.

 

killall은 모든 프로세스를 종료시킨다.