프로세스와 서비스 관리 문제
프로세스 관리는 리눅스 시스템 운영의 핵심이며, 시험에서도 꾸준히 출제됩니다. ps 명령어 출력 해석, 시그널 번호, crontab 표현식이 자주 등장합니다.
출제 유형 1 — 프로세스 관련
ps 출력 해석
ps aux
주요 컬럼의 의미를 알아야 합니다.
| 컬럼 | 의미 |
|---|---|
| USER | 프로세스 소유자 |
| PID | 프로세스 ID |
| %CPU | CPU 사용률 |
| %MEM | 메모리 사용률 |
| VSZ | 가상 메모리 크기 (KB) |
| RSS | 실제 사용 메모리 (KB) |
| STAT | 프로세스 상태 |
| START | 시작 시간 |
| COMMAND | 실행 명령어 |
STAT(상태) 코드는 자주 출제됩니다.
| 상태 코드 | 의미 |
|---|---|
| R | Running (실행 중 또는 실행 대기) |
| S | Sleeping (대기 상태, 인터럽트 가능) |
| D | Disk wait (디스크 I/O 대기, 인터럽트 불가) |
| Z | Zombie (종료됐지만 부모가 회수 안 함) |
| T | Stopped (정지됨, Ctrl+Z) |
kill 시그널
kill -SIGTERM 1234 # 정상 종료 요청kill -9 1234 # 강제 종료kill -l # 시그널 목록 출력
| 번호 | 이름 | 의미 |
|---|---|---|
| 1 | SIGHUP | 연결 끊김, 설정 파일 재로드 |
| 2 | SIGINT | 키보드 인터럽트 (Ctrl+C) |
| 9 | SIGKILL | 강제 종료 (무시 불가) |
| 15 | SIGTERM | 정상 종료 요청 (기본값) |
| 18 | SIGCONT | 정지된 프로세스 재개 |
| 19 | SIGSTOP | 프로세스 정지 (무시 불가) |
nice와 renice
프로세스 우선순위는 -20(최고)에서 19(최저) 범위입니다.
# 낮은 우선순위로 실행nice -n 10 ./heavy_script.sh# 실행 중인 프로세스 우선순위 변경renice -n 5 -p 1234# root만 우선순위를 높일 수 있음 (음수 nice 값)sudo renice -n -5 -p 1234
백그라운드/포그라운드 전환
# 백그라운드로 실행./script.sh &# 실행 중 백그라운드로 보내기 (Ctrl+Z 후)bg# 포그라운드로 가져오기fg# 작업 목록 확인jobs
문제 1
다음 중 프로세스에 강제 종료 시그널을 보내는 명령어로 올바른 것은 무엇인가.
kill -1 1234kill -9 1234kill -15 1234kill -2 1234
정답: 2번. SIGKILL(9번)은 강제 종료 시그널로, 프로세스가 무시하거나 차단할 수 없습니다. 1번은 SIGHUP(재로드), 15번은 SIGTERM(정상 종료 요청), 2번은 SIGINT(Ctrl+C)입니다.
문제 2
ps aux 출력에서 STAT 컬럼 값이 Z인 프로세스의 상태로 올바른 것은 무엇인가.
- 실행 중인 프로세스
- 디스크 I/O를 기다리는 프로세스
- 부모 프로세스가 종료 상태를 회수하지 않은 프로세스
- 사용자 신호로 정지된 프로세스
정답: 3번. Z는 Zombie 상태입니다. 프로세스는 종료됐지만 부모 프로세스가 wait() 시스템 콜로 종료 상태를 회수하지 않아 프로세스 테이블에 남아 있는 상태입니다.
문제 3
현재 실행 중인 프로세스의 CPU 우선순위를 높이려면 nice 값을 어떻게 조정해야 하는가.
- 양수로 높인다
- 음수로 낮춘다
- 0으로 초기화한다
- 절대값을 크게 한다
정답: 2번. nice 값이 낮을수록(음수에 가까울수록) CPU 스케줄링 우선순위가 높아집니다. 즉 우선순위를 높이려면 nice 값을 음수 방향으로 낮춰야 합니다.
출제 유형 2 — 서비스 관리
Ubuntu 24.04는 systemd를 사용합니다. systemctl 명령어 사용법은 필기와 실기 모두에서 출제됩니다.
# 서비스 상태 확인systemctl status nginx# 서비스 시작/정지/재시작systemctl start nginxsystemctl stop nginxsystemctl restart nginx# 설정 변경 후 재로드 (무중단)systemctl reload nginx# 부팅 시 자동 시작 설정systemctl enable nginx# 자동 시작 해제systemctl disable nginx# 활성화 여부 확인systemctl is-enabled nginx# 실행 중 여부 확인systemctl is-active nginx
문제 4
부팅 시 nginx 서비스가 자동으로 시작되도록 설정하는 명령어로 올바른 것은 무엇인가.
systemctl start nginxsystemctl active nginxsystemctl enable nginxsystemctl autostart nginx
정답: 3번. systemctl enable은 서비스를 부팅 시 자동 시작 대상으로 등록합니다. start는 즉시 실행, active와 autostart는 존재하지 않는 서브커맨드입니다.
출제 유형 3 — 스케줄링
crontab 표현식
crontab은 특정 시간에 명령을 자동으로 실행하는 스케줄러입니다.
분 시 일 월 요일 명령
* * * * * 실행할 명령어
| 필드 | 범위 | 의미 |
|---|---|---|
| 분 | 0-59 | 분 |
| 시 | 0-23 | 시간 |
| 일 | 1-31 | 날짜 |
| 월 | 1-12 | 월 |
| 요일 | 0-7 | 요일 (0과 7 모두 일요일) |
특수 문자는 자주 출제됩니다.
| 문자 | 의미 |
|---|---|
* |
모든 값 |
, |
목록 (예: 1,3,5) |
- |
범위 (예: 1-5) |
/ |
간격 (예: */5는 5마다) |
# 매일 새벽 2시 30분에 실행30 2 * * * /usr/local/bin/backup.sh# 매주 월요일 오전 9시에 실행0 9 * * 1 /home/user/weekly.sh# 5분마다 실행*/5 * * * * /home/user/check.sh# 매월 1일과 15일 오전 0시에 실행0 0 1,15 * * /home/user/monthly.sh# 평일(월~금) 오전 8시에 실행0 8 * * 1-5 /home/user/workday.sh
# crontab 편집crontab -e# 현재 사용자의 crontab 확인crontab -l# crontab 삭제crontab -r
at 명령어
일회성 예약 작업에 사용합니다.
# 1시간 후 실행at now + 1 hourat> /home/user/report.shat> Ctrl+D# 내일 오전 10시에 실행at 10:00 tomorrow# 예약 작업 목록 확인atq# 예약 작업 취소atrm 작업번호
문제 5
다음 crontab 표현식이 실행되는 시점으로 올바른 것은 무엇인가.
0 */6 * * * /home/user/check.sh
- 6분마다 실행
- 6시간마다 실행 (0시, 6시, 12시, 18시)
- 매일 6시 정각에만 실행
- 매월 6일 0시에 실행
정답: 2번. */6은 "6마다"를 의미합니다. 시(hour) 필드에 */6이 있으므로 0, 6, 12, 18시 정각(분이 0이므로)에 실행됩니다.
문제 6
매주 금요일 오후 11시 59분에 실행되는 crontab 표현식으로 올바른 것은 무엇인가.
59 23 * * 5 /script.sh23 59 * * 5 /script.sh59 23 5 * * /script.sh* * * * 5 /script.sh
정답: 1번. crontab 순서는 분 시 일 월 요일입니다. 59분, 23시, 모든 일, 모든 월, 5번 요일(금요일)이므로 59 23 * * 5입니다.