Develop

[리눅스 마스터 2급-2차] 3. 프로세스 관리 본문

자격증

[리눅스 마스터 2급-2차] 3. 프로세스 관리

230801 2025. 12. 5. 15:24

안녕하세요 ~

오늘은 프로세스 관리에 대해서 알아보겠습니다 .ᐟ 

 

 

Day 3 프로세스 및 작업 관리

1. 프로세스

프로세스(Process): 실행 중인 프로그램. 메모리에 적재되어 CPU를 할당받아 실행되는 상태

 

프로세스 상태

  • R (Running): 실행 중이거나 실행 대기 중
  • S (Sleeping): 인터럽트 가능한 대기 상태
  • D (Uninterruptible): 인터럽트 불가능한 대기 상태
  • Z (Zombie): 종료되었지만 부모 프로세스가 정리하지 않은 상태
  • T (Stopped): 정지된 상태

 


 

2. 프로세스 확인 명령어

ps (Process Status)

: 프로세스 목록 확인

*# 기본 사용*
ps                    *# 현재 터미널의 프로세스만 표시

# 주요 옵션*
ps -e                 *# 모든 프로세스 표시 (every: 모든, -A 와 동일의미)*
ps -f                 *# 자세한(full) 정보 표시*
ps -ef                *# 모든 프로세스를 자세히 표시 (every full format)*
ps  aux               *# BSD 스타일(하이픈 없음), 모든 사용자의 프로세스 표시
                      # -a : all
                      # -u : user-oriented, 사용자 중심 형식
                      # -x : no controlling tty, 터미널이 없는 프로세스도 포함*                                          
ps -u username        *# 특정 사용자의 프로세스 표시 (user)*
ps -p PID             *# 특정 PID의 프로세스 정보 표시 (process)

# 실무 활용*
ps -ef | grep httpd   *# httpd 프로세스 검색*
ps aux --sort=-%mem   *# 메모리 사용량 순 정렬*

 

출력 필드 의미

  • PID: 프로세스 ID
  • PPID: 부모 프로세스 ID
  • UID/USER: 프로세스 소유자
  • %CPU: CPU 사용률
  • %MEM: 메모리 사용률
  • VSZ: 가상 메모리 크기(KB)
  • RSS: 실제 메모리 크기(KB)
  • STAT: 프로세스 상태
  • START: 시작 시간
  • TIME: 누적 CPU 시간
  • COMMAND: 실행 명령어

 

top

: 실시간 프로세스 모니터링

top                   *# 실시간 모니터링 시작

# top 실행 중 단축키*
h                     *# 도움말 (help)*
q                     *# 종료 (quit)*
k                     *# 프로세스 종료 (PID 입력) (kill)*
M                     *# 메모리 사용량 순 정렬 (memory)*
P                     *# CPU 사용량 순 정렬 (processor)*
u                     *# 특정 사용자 프로세스만 표시 (user)*
1                     *# CPU 코어별 사용률 표시

# 옵션과 함께 실행 (one)*
top -d 5              *# 5초마다 갱신 (delay, 화면 갱신간격 설정, 초단위)*
top -n 3              *# 3회만 갱신 후 종료 (number, 갱신횟수)*
top -p 1234           *# PID 1234만 모니터링*
top -u username       *# 특정 사용자의 프로세스만 표시*

 

pgrep / pkill

: 프로세스 이름으로 검색/종료

*# pgrep: 프로세스 이름으로 PID 검색*
pgrep httpd           *# httpd 프로세스의 PID 찾기*
pgrep -u root         *# root 사용자의 프로세스 찾기 (user)*
pgrep -l httpd        *# 프로세스 이름도 함께 표시 (list)

# pkill: 프로세스 이름으로 종료*
pkill httpd           *# httpd 프로세스 종료*
pkill -u username     *# 특정 사용자의 모든 프로세스 종료*

 

 


 

3. 프로세스 제어

kill

: 프로세스에 시그널 전송

*# 기본 사용*
kill PID              *# TERM 시그널 전송 (정상 종료 요청)*
kill -9 PID           *# KILL 시그널 전송 (강제 종료, signal9 : sigkill)*
kill -15 PID          *# TERM 시그널 전송 (기본값과 동일)

# 주요 시그널*
kill -l               *# 모든 시그널 목록 보기*
kill -1 PID           *# HUP (재시작, 설정파일 재로드)*
kill -2 PID           *# INT (Ctrl+C와 동일)*
kill -9 PID           *# KILL (강제 종료, 무시 불가)*
kill -15 PID          *# TERM (정상 종료 요청)*
kill -18 PID          *# CONT (일시정지된 프로세스 재개)*
kill -19 PID          *# STOP (일시정지)

# 실무 예제*
kill -HUP $(cat /var/run/nginx.pid)    *# nginx 재시작*

 

시그널 종류

  1. SIGHUP (1): 재시작, 설정 다시 읽기
  2. SIGINT (2): 인터럽트 (Ctrl+C)
  3. SIGQUIT (3): 종료 및 코어 덤프
  4. SIGKILL (9): 강제 종료 (무시 불가)
  5. SIGTERM (15): 정상 종료 요청 (기본값)
  6. SIGCONT (18): 재개
  7. SIGSTOP (19): 일시정지 (무시 불가)

 

killall

: 프로세스 이름으로 모든 프로세스 종료

killall httpd         *# httpd 이름을 가진 모든 프로세스 종료*
killall -9 firefox    *# firefox 강제 종료*
killall -u username   *# 특정 사용자의 모든 프로세스 종료*
killall -i httpd      *# 종료 전 확인 (-i: interactive)*

 

 


 

4. 백그라운드 작업 관리

포그라운드 vs 백그라운드

  • 포그라운드(Foreground): 터미널을 점유하며 실행
  • 백그라운드(Background): 터미널 점유 없이 뒤에서 실행

 

백그라운드 실행

*# 명령어 뒤에 & 붙이기*
sleep 100 &           *# 백그라운드에서 실행*
find / -name "*.log" > result.txt 2>&1 &

*# 실행 중인 프로세스를 백그라운드로 전환

# 1. Ctrl+Z로 일시정지
# 2. bg 명령으로 백그라운드 실행*
bg                    *# 가장 최근 작업을 백그라운드로*
bg %1                 *# 작업 번호 1을 백그라운드로*

 

jobs

: 백그라운드 작업 목록 확인

jobs                  *# 현재 쉘의 백그라운드 작업 목록*
jobs -l               *# PID와 함께 표시 (long, list)*
jobs -r               *# 실행 중인 작업만 표시 (running)*
jobs -s               *# 정지된 작업만 표시 (stopped)

# 출력 예시
# [1]+  Running    sleep 100 &
# [2]-  Stopped    vi file.txt*

fg

: 백그라운드 작업을 포그라운드로 전환

fg                    *# 가장 최근 작업을 포그라운드로*
fg %1                 *# 작업 번호 1을 포그라운드로*
fg %sleep             *# sleep 명령을 포그라운드로*

bg

: 정지된 작업을 백그라운드에서 재개

bg                    *# 가장 최근 정지된 작업 재개*
bg %2                 *# 작업 번호 2를 백그라운드에서 재개*

nohup (no hangup)

: 로그아웃 후에도 프로세스 계속 실행

nohup command &       *# 로그아웃해도 계속 실행*
nohup ./script.sh &   *# 스크립트를 백그라운드에서 계속 실행

# 출력은 nohup.out 파일에 저장됨
# 출력 파일 지정*
nohup command > output.log 2>&1 &

 

 


 

5. 프로세스 우선순위

nice

: 새 프로세스의 우선순위 설정

*# NI(nice) 값: -20(높음) ~ 19(낮음), 기본값 0*
nice -n 10 command    *# nice 값 10으로 실행 (낮은 우선순위)*
nice -10 command      *# nice 값 -10으로 실행 (높은 우선순위)*
nice command          *# nice 값 10으로 실행 (기본)

# 실무 예제*
nice -n 15 find / -name "*.log"    *# 낮은 우선순위로 검색 (-n : nice value, nice 값 지정)*

주의사항

  • 일반 사용자는 nice 값을 0~19만 설정 가능
  • 음수 값(-20~-1)은 root만 설정 가능

 

renice

: 실행 중인 프로세스의 우선순위 변경

renice -n 5 -p 1234       *# PID 1234의 nice(우선순위)값을 5로 변경*
renice 5 1234             *# 위와 동일*
renice -n 10 -u username  *# 특정 사용자의 모든 프로세스*
renice -n -5 -g groupname *# 특정 그룹의 모든 프로세스

# 실무 예제*
renice -n 10 $(pgrep backup)    *# backup 프로세스 우선순위 낮춤*

 

 


 

6. 시스템 리소스 모니터링

free

: 메모리 사용량 확인

free                  *# 기본 표시 (KB 단위)*
free -h               *# 사람이 읽기 쉬운 형식 (GB, MB)*
free -m               *# MB 단위로 표시*
free -g               *# GB 단위로 표시*
free -s 5             *# 5초마다 갱신하여 표시 (seconds)
free -c 3             # 3번만 표시 후 종료 (count)

# 출력 필드
# total: 전체 메모리
# used: 사용 중인 메모리
# free: 사용 가능한 메모리
# shared: 공유 메모리
# buff/cache: 버퍼/캐시로 사용되는 메모리
# available: 실제 사용 가능한 메모리*

 

mac  터미널에는 free 대신 vm_stat 을 씁니다.

# Mac에는 free가 없음! 대신:
vm_stat              # 메모리 정보

 

uptime

: 시스템 가동 시간 및 부하 확인

uptime                *# 현재 시간, 가동시간, 사용자수, 평균 부하
# 출력 예시: 15:30:00 up 10 days, 5:23, 3 users, load average: 0.15, 0.25, 0.30
# load average: 1분, 5분, 15분 평균 부하# CPU 코어 수보다 높으면 과부하 상태*

 

 


 

실습 예제

예제 1: 프로세스 확인

*# 모든 프로세스 확인*
ps -ef

*# apache 프로세스 찾기*
ps -ef | grep httpd

*# 메모리 사용량이 높은 상위 10개 프로세스*
ps aux --sort=-%mem | head -11

 

예제 2: 백그라운드 작업

*# 백그라운드에서 파일 검색*
find / -name "*.conf" > config_files.txt 2>&1 &

*# 작업 확인*
jobs -l

*# 포그라운드로 전환*
fg %1

 

예제 3: 프로세스 종료

*# PID로 종료*
kill 1234

*# 강제 종료*
kill -9 1234

*# 프로세스 이름으로 종료*
killall firefox

*# 확인하면서 종료*
killall -i httpd

 

예제 4: 우선순위 조정

*# 낮은 우선순위로 백업 실행*
nice -n 15 tar -czf backup.tar.gz /home &

*# 실행 중인 프로세스 우선순위 변경*
renice -n 10 -p $(pgrep backup)

 

 

 

느낀 점

  • 조금씩 낯설어지는 명령어들...
  • 그동안은 mac에 내장된 터미널을 사용해도 명령어가 크게 다르지않았는데,  도커에 리눅스깔고 해봐야될 것 같다.