
결론부터 말하면, 프로세스 관리는 ‘찾기 → 상태 해석 → 필요한 대상에 신호 보내기 → 우선순위 조정’의 순서로 공부하면 됩니다. ps는 한 시점의 목록, top은 계속 갱신되는 화면, kill은 이름과 달리 프로세스에 시그널을 보내는 명령입니다. 바로 kill -9부터 쓰는 습관은 개념상으로도 운영상으로도 좋지 않습니다.
KAIT 현행 출제기준은 리눅스마스터 2급에서 프로세스의 개념 및 유형, 프로세스 Utility를 다룹니다. 이 글은 Bash 작업 제어와 procps-ng 4.0 계열의 공식 자료를 중심으로 PID·PPID, 포그라운드·백그라운드, 상태 코드, 시그널, nice 값을 연결합니다. 전체 과목 지도는 2026 리눅스마스터 2급 전체 학습지도에 있습니다.
프로세스 명령 핵심 비교표
| 도구 | 주요 목적 | 시험에서 구별할 점 |
|---|---|---|
ps |
실행 시점의 프로세스 정보를 한 번 출력 | 스냅샷이며 선택·출력 옵션을 조합할 수 있음 |
top |
시스템 요약과 프로세스 목록을 반복 갱신 | 실시간에 가까운 대화형 관찰 도구 |
pgrep |
이름이나 속성으로 PID 검색 | 문자열 grep보다 프로세스 선택 목적이 분명함 |
kill |
PID 또는 작업에 시그널 전달 | 기본 시그널은 일반적으로 TERM, 무조건 종료 명령이 아님 |
jobs |
현재 셸이 관리하는 작업 목록 출력 | 시스템 전체 프로세스 목록이 아님 |
bg/fg |
정지된 작업을 백그라운드·포그라운드에서 재개 | PID 대신 %1 같은 작업 지정자를 자주 사용 |
nice |
새 명령을 조정된 nice 값으로 시작 | 이미 실행 중인 프로세스에는 사용하지 않음 |
renice |
실행 중인 프로세스의 nice 값 변경 | 일반 사용자는 보통 자신의 프로세스를 덜 우선하도록만 조정 |
프로그램·프로세스·작업의 차이
- 프로그램: 디스크에 저장된 실행 가능한 코드와 데이터
- 프로세스: 프로그램이 실행되어 메모리·CPU 시간·열린 파일 같은 자원을 가진 상태
- PID: 프로세스를 식별하는 번호, PPID는 부모 프로세스의 PID
- 작업(job): 대화형 셸이 하나의 명령 또는 파이프라인을 관리하기 위해 붙인 단위
한 작업이 파이프라인이라면 여러 프로세스로 구성될 수 있습니다. 따라서 %1 같은 작업 번호와 운영체제가 부여한 PID를 같은 번호 체계로 보면 안 됩니다.
ps로 필요한 열만 읽기
# 현재 사용자 프로세스를 선택한 열로 확인
ps -u "$USER" -o pid,ppid,stat,ni,comm
# 특정 PID만 확인
ps -p $$ -o pid,ppid,stat,ni,etime,comm
# 이름과 명령행을 함께 검색
pgrep -a bash
procps-ng의 ps는 UNIX식 -e, BSD식 aux, GNU식 --sort 등 여러 옵션 문법을 받아들입니다. BSD식 옵션을 섞으면 기본 선택이나 표시가 달라질 수 있으므로, 결과를 예측하려면 한 예제 안에서 문법을 일관되게 쓰는 편이 좋습니다.
자주 보는 상태 코드
| 코드 | 의미 | 주의 |
|---|---|---|
| R | 실행 중 또는 실행 대기 | 항상 CPU를 점유 중이라는 뜻은 아님 |
| S | 인터럽트 가능한 대기 | 일반적인 잠든 상태 |
| D | 인터럽트 불가능한 대기 | 주로 I/O 대기와 연결됨 |
| T | 작업 제어 신호로 정지 | bg/fg로 재개 가능 |
| Z | 종료했지만 부모가 상태를 회수하지 않은 좀비 | 이미 종료했으므로 좀비 자신을 kill하는 것으로 해결되지 않음 |
top은 반복 갱신, ps는 스냅샷
top은 시스템 요약과 커널이 관리 중인 작업 목록을 동적으로 보여 줍니다. CPU·메모리 비율은 측정 구간과 표시 설정에 영향을 받으므로 한 숫자만 보고 원인을 단정하지 말고 PID, 상태, 실행 시간, 명령을 함께 확인해야 합니다.
top
# 도움말: h 또는 ?
# 종료: q
실습 중 top의 k와 r은 실제 프로세스에 영향을 줄 수 있습니다. 처음에는 보기와 정렬만 연습하세요.
안전한 시그널 실습
아래 예시는 연습을 위해 자신이 만든 sleep 프로세스 하나만 대상으로 합니다. TERM은 프로그램이 정리 작업을 할 기회를 주는 일반적인 종료 요청이고, KILL은 잡거나 무시하거나 처리할 수 없어 마지막 수단으로 남겨야 합니다.
sleep 300 &
demo_pid=$!
ps -p "$demo_pid" -o pid,ppid,stat,ni,comm
kill -TERM "$demo_pid"
wait "$demo_pid" 2>/dev/null
# 숫자 0은 실제 신호를 보내지 않고 대상·권한 확인에 사용
kill -0 $$ && printf 'current shell is reachable\n'
kill -l은 시그널 이름을 확인합니다. 번호는 시스템에 따라 차이가 있을 수 있으므로 답안을 쓸 때는 SIGTERM, SIGKILL, SIGSTOP, SIGCONT처럼 이름과 목적을 먼저 연결하세요.
포그라운드·백그라운드 작업 제어
# 대화형 Bash에서 실행
sleep 120 &
jobs -l
fg %+
# fg로 가져온 뒤 Ctrl+Z를 누르면 정지
bg %+
jobs -l
kill %+
&는 처음부터 백그라운드로 시작합니다. 위 예시의 %+는 현재 작업, 즉 방금 만든 sleep 작업을 가리킵니다. Ctrl+Z는 보통 포그라운드 작업에 정지 신호를 보내며, 종료가 아닙니다. jobs는 현재 셸의 작업표만 보므로 다른 터미널이나 서비스의 프로세스는 ps, pgrep, top으로 찾아야 합니다.
nice와 renice
nice 값은 일반적으로 -20부터 19 범위이며 값이 작을수록 더 우호적으로, 값이 클수록 덜 우호적으로 스케줄됩니다. 다만 nice는 실시간 스케줄링 우선순위 그 자체가 아니라 일반 스케줄러에 주는 힌트입니다.
# 새 프로세스를 nice 값 5만큼 덜 우선하도록 시작
nice -n 5 sleep 120 &
demo_pid=$!
ps -p "$demo_pid" -o pid,ni,stat,comm
# 실행 중인 자신의 프로세스를 nice 값 10으로 변경
renice --priority 10 -p "$demo_pid"
kill -TERM "$demo_pid"
GNU nice -n 5는 현재 niceness에 조정값을 더해 새 명령을 시작합니다. util-linux의 renice는 기본적으로 절대값을 받으며, -n 해석은 POSIXLY_CORRECT 설정과 구현 차이에 영향을 받을 수 있습니다. 시험에서는 새 프로세스는 nice, 기존 프로세스는 renice라는 구분부터 확실히 잡으세요.
자주 틀리는 지점
kill은 종료만 하는 명령이 아니라 시그널 전달 도구입니다.jobs는 시스템 전체가 아니라 현재 셸의 작업을 표시합니다.Ctrl+Z는 종료가 아니라 정지이고,Ctrl+C는 보통 인터럽트 신호입니다.- nice 값이 클수록 CPU 우선도가 높아진다고 외우면 반대입니다.
- 좀비는 이미 실행을 끝낸 상태이므로 원인은 부모의 회수 처리에서 찾아야 합니다.
직접 만든 셀프체크 5문항
ps와top의 가장 큰 표시 방식 차이는 무엇인가?- PID와
%1같은 작업 번호는 무엇이 다른가? kill에 시그널을 생략했을 때 일반적으로 요청되는 신호는 무엇인가?- 새 프로세스와 이미 실행 중인 프로세스의 nice 값을 조정할 때 각각 어떤 명령을 쓰는가?
- 상태 코드 Z인 프로세스에 KILL을 보내도 좀비 문제가 직접 해결되지 않는 이유는 무엇인가?
정답 확인
ps는 실행 시점의 스냅샷을 출력하고,top은 목록과 요약을 반복 갱신합니다.- PID는 운영체제의 프로세스 식별자이고, 작업 번호는 현재 셸이 명령·파이프라인을 관리하기 위해 붙인 식별자입니다.
SIGTERM입니다.- 새 프로세스는
nice, 실행 중인 프로세스는renice를 사용합니다. - 좀비는 이미 종료했고 부모가 종료 상태를 회수하지 않은 항목이므로, 실행 중인 프로세스처럼 다시 종료할 대상이 아니기 때문입니다.
공식 자료
- KAIT 리눅스마스터 현행 출제기준
- procps-ng 공식 저장소
- procps-ng 공식 릴리스
- GNU Bash 작업 제어
- GNU Coreutils nice 공식 매뉴얼
- util-linux 공식 저장소 미러
이 글은 2026년 7월 11일 갱신했습니다. procps-ng 최신 릴리스와 KAIT 시험 대상 배포판의 탑재 버전은 다를 수 있으므로, 공통 옵션과 개념을 우선했습니다. 실제 시스템에서는 종료 전에 PID·사용자·명령행을 다시 확인하세요.
'학위공부 > IT 자격증' 카테고리의 다른 글
| 2026 리눅스마스터 2급 ⑧ 소프트웨어 설치|RPM·DNF·APT·dpkg 차이 (0) | 2026.07.11 |
|---|---|
| 2026 리눅스마스터 2급 ⑦ 에디터|vi·Vim 모드와 검색·치환·저장 명령 (0) | 2026.07.11 |
| 2026 리눅스마스터 2급 ⑤ Shell 핵심정리|셸 변수·환경변수·설정 파일·인용부호 (0) | 2026.07.11 |
| 2026 리눅스마스터 2급 ④ 파일시스템 명령어|권한·링크·마운트 정리 (0) | 2026.07.11 |
| 2026 리눅스마스터 2급 ③ 기본 명령어|사용자·경로·파일 조작 실습 (0) | 2026.07.11 |