Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- cs
- 순차탐색
- MySQL
- 오블완
- zsh theme
- 터미널
- CS스터디
- 욕심쟁이 방법
- 스터디2기
- table status
- 네트워킹데이
- mysql 표 출력
- 동적 프로그래밍 방법
- Pager
- 알고리즘
- mycli
- 분할정복 방법
- VI
- spring boot
- 데이크스트라
- oh-my-zsh
- 오일러 경로
- 이진탐색
- zsh
- Less
- 인프런
- 티스토리챌린지
- 인프런워밍업클럽
- mysql 표
- 맥
Archives
- Today
- Total
Develop
[리눅스 마스터 2급-2차] 3. 프로세스 관리 본문
안녕하세요 ~
오늘은 프로세스 관리에 대해서 알아보겠습니다 .ᐟ
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 재시작*
시그널 종류
- SIGHUP (1): 재시작, 설정 다시 읽기
- SIGINT (2): 인터럽트 (Ctrl+C)
- SIGQUIT (3): 종료 및 코어 덤프
- SIGKILL (9): 강제 종료 (무시 불가)
- SIGTERM (15): 정상 종료 요청 (기본값)
- SIGCONT (18): 재개
- 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에 내장된 터미널을 사용해도 명령어가 크게 다르지않았는데, 도커에 리눅스깔고 해봐야될 것 같다.

'자격증' 카테고리의 다른 글
| [리눅스 마스터 2급-2차] 5. 쉘 스크립트, 네트워크, 텍스트 처리 (0) | 2025.12.08 |
|---|---|
| [리눅스 마스터 2급-2차] 4.파일시스템, 에디터, 소프트웨어 관리 (0) | 2025.12.07 |
| [리눅스 마스터 2급-2차] 2. 파일 권한 및 소유권 (1) | 2025.12.05 |
| [리눅스 마스터 2급-2차] 1. 파일 및 디렉터리 관리 (1) | 2025.12.05 |
| [리눅스 마스터 2급] 리눅스 일반 (1차) (2) | 2025.06.10 |