도구 용도 핵심 포인트 ps aux전체 + 사용률 하이픈 없음, %CPU/%MEM ps -ef전체 + PPID 하이픈 있음, 부모 추적 top/htop실시간 top은 기본 탑재, htop은 설치 필요 pgrep/pstree이름 검색/트리 grep 자기참조 회피, 계층 시각화
시그널은 프로세스와 대화하는 유일한 수단이다. 번호를 외운다.
번호 이름 의미 차단 가능? 1 SIGHUP 설정 재읽기(reload) 가능 2 SIGINT Ctrl+C 인터럽트 가능 9 SIGKILL 강제 종료(즉시) 불가 15 SIGTERM 정상 종료(kill 기본값) 가능 19 SIGSTOP 정지 불가
우선순위는 nice 값(-20~19, 기본 0) 으로 정한다. 낮을수록 우선, 음수는 root 전용, nice는 실행 시·renice는 실행 중.
⚠️ 함정 복습 : ps aux(맨몸)와 ps -ef(하이픈)를 섞지 말 것. 종료는 15(정상)→9(강제) 순서. 9(SIGKILL)와 19(SIGSTOP)만 차단 불가. nice 음수는 root만. kill은 PID로, killall/pkill은 이름으로.
새 프로세스는 fork(복제) → exec(교체) 로 태어난다. fork는 새 PID의 자식을 만들고, exec는 PID를 유지한 채 프로그램만 바꾼다.
작업 제어는 &(백그라운드)·Ctrl+Z(정지)·bg·fg·jobs·nohup.
좀비와 고아는 정반대 개념이다.
구분 좀비(Zombie) 고아(Orphan) 자식 죽음(Z, defunct) 살아 있음 부모 살았으나 wait 안 함 먼저 종료됨 PPID 원래 부모 1번으로 입양 위험성 PID 점유(위험) 무해 해결 부모 종료/재시작 1번이 자동 회수
⚠️ 함정 복습 : "좀비=죽은 자식+안 거두는 부모, 고아=산 자식+죽은 부모(1번 입양)". 좀비는 kill -9로 못 죽이고 부모를 처리해야 한다. Ctrl+Z는 정지(T)지 종료가 아니다. exec는 새 프로세스를 만들지 않는다(PID 유지).
런레벨 systemd target 의미 0 poweroff.target 종료 1 rescue.target 단일 사용자(복구) 2·3·4 multi-user.target 텍스트 다중 사용자 5 graphical.target GUI 6 reboot.target 재부팅
systemctl의 start/enable 구분 이 중요하다.
명령 의미 start/stop지금 즉시 켜기/끄기 enable/disable부팅 시 자동 시작 등록/해제 enable --now등록 + 즉시 시작 statusactive(실행)·enabled(자동) 동시 확인
0·6은 기본 런레벨 금지. 2·3·4가 모두 multi-user.target. start(지금 한 번)와 enable(부팅 자동)은 별개. unit 파일 수정 후 daemon-reload 필수. [Install] WantedBy=가 enable 연결 대상. 로그는 journalctl -u 서비스 -f.
crontab 5필드: 분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-7, 0·7=일) .
* , - / 기호로 패턴을 만들고, 일·요일 동시 지정은 OR 다.
도구 횟수 시점 데몬 cron 반복 정해진 주기 crond at 1회 지정 시각 atd batch 1회 부하 낮을 때 atd
위치 사용자 crontab 시스템 crontab 필드 5필드 + 명령 5필드 + 사용자 + 명령(6) 관리 crontab -e/-l/-r/etc/crontab, /etc/cron.d/
순서 "분시일월요". 요일 0·7=일요일. 사용자 crontab은 5필드, /etc/crontab은 6필드. cron=반복, at/batch=1회. allow > deny 우선. crontab -r은 전체 삭제 주의. at 목록은 atq, 삭제는 atrm.
시나리오 A — 폭주 프로세스 안전 종료
ps aux --sort=-%cpu | head # CPU 폭주 프로세스 식별
pgrep -l runaway # 정확한 PID 확보
kill -15 1234 # 먼저 정상 종료 시도
kill -9 1234 # 안 되면 강제 종료
Day 1(ps·pgrep·시그널 15→9) 통합.
시나리오 B — 새 서비스 등록 + 자동 시작 + 로그 확인
vi /etc/systemd/system/myapp.service # unit 파일 작성
systemctl daemon-reload # 변경 인식(필수)
systemctl enable --now myapp # 등록 + 즉시 시작
systemctl status myapp # active/enabled 확인
journalctl -u myapp -f # 실시간 로그 추적
Day 3(unit·daemon-reload·enable·journalctl) 통합.
시나리오 C — 매일 새벽 백업 자동화
crontab -e
# 0 3 * * * /usr/local/bin/backup.sh # 매일 새벽 3시
crontab -l # 등록 확인
백업 스크립트가 무거우면 nice로 양보하거나 batch로 한가할 때 실행 — Day 1·2·4 통합.
실무 장애 대응의 표준 흐름이 정확히 이 순서다 — ps/top으로 범인을 찾고(Day 1), 시그널 15→9로 안전하게 멈추고(Day 1), systemctl로 서비스를 정상 재기동하며(Day 3), journalctl로 원인 로그를 확인하고(Day 3), 재발 방지를 위해 cron에 점검 작업을 건다(Day 4). 이번 주 내용은 시험을 넘어 실무 운영의 골격이다.
PID 1번 : 커널이 처음 띄우는 프로세스(init/systemd). 모든 프로세스의 조상이자 초기화의 주인공이며 고아를 입양한다.
시그널 : 프로세스에 보내는 번호 신호. 1 HUP(리로드) · 2 INT(Ctrl+C) · 9 KILL(강제) · 15 TERM(기본) · 19 STOP(정지).
차단 불가 시그널 : 9(SIGKILL)와 19(SIGSTOP). 프로세스가 가로채거나 무시할 수 없다.
nice 값 : CPU 양보 정도를 나타내는 -20~19 값. 낮을수록 우선순위가 높고 음수는 root만 준다.
fork / exec : 자신을 복제해 새 PID의 자식을 만드는 것 / PID는 그대로 두고 실행 코드만 갈아끼우는 것.
좀비 / 고아 : 죽은 자식을 부모가 안 거둔 상태(Z, 위험) / 부모가 먼저 죽어 1번에 입양된 산 자식(무해).
런레벨 ↔ target : SysV의 0~6 상태와 systemd의 상태 묶음 unit. 2·3·4는 multi-user, 5는 graphical로 합쳐진다.
start vs enable : 지금 한 번 켜기 / 부팅할 때마다 자동으로 켜지게 등록하기. enable --now면 둘 다.
daemon-reload : unit 파일을 고친 뒤 systemd가 디스크 내용을 다시 읽게 하는 명령. 빠뜨리면 옛 설정으로 돈다.
crontab 5필드 : 분-시-일-월-요일. "분시일월요"로 외우고, 요일은 0과 7이 모두 일요일이다.
at / batch : 지정 시각에 1회 실행 / 시스템 부하가 낮아질 때 1회 실행. 둘 다 atd 데몬이 처리한다.
📝 연습 문제 선택지를 클릭하면 정답·해설이 펼쳐집니다.
모든 프로세스를 부모 프로세스(PPID) 컬럼과 함께 확인하기에 가장 적절한 명령은?
A ps auxB ps -efC topD pgrep -l다음 시그널 중 프로세스가 가로채거나 무시할 수 없어 반드시 동작하는 것끼리 묶은 것은?
A SIGTERM(15)과 SIGINT(2) B SIGHUP(1)과 SIGTERM(15) C SIGKILL(9)과 SIGSTOP(19) D SIGINT(2)와 SIGHUP(1) kill 명령에 옵션 없이 PID만 지정했을 때 전송되는 기본 시그널과, 그 성격으로 옳은 것은?
A 9번 SIGKILL — 즉시 강제 종료 B 15번 SIGTERM — 정리 시간을 주는 정상 종료 C 1번 SIGHUP — 설정 재읽기 D 2번 SIGINT — 키보드 인터럽트 nice 값에 대한 설명으로 옳은 것은?
A 범위는 -20~19이고, 값이 낮을수록 우선순위가 높으며, 음수 설정은 root만 가능하다 B 범위는 0~39이고, 값이 클수록 우선순위가 높다 C 일반 사용자도 자기 프로세스의 nice를 음수로 낮춰 우선순위를 올릴 수 있다 D nice는 실행 중인 프로세스에, renice는 새로 실행할 명령에 적용한다 좀비(zombie) 프로세스와 고아(orphan) 프로세스의 차이로 옳은 것은?
A 좀비는 부모가 먼저 죽은 산 자식, 고아는 죽은 자식이다 B 좀비는 죽은 자식을 부모가 회수하지 않은 것(위험), 고아는 부모가 먼저 죽어 1번에 입양된 산 자식(무해)이다 C 둘 다 메모리를 과다하게 점유해 시스템을 마비시킨다 D 좀비와 고아 모두 kill -9로 즉시 제거된다 포그라운드 작업 중 Ctrl+Z를 입력했을 때의 결과로 옳은 것은?
A 작업이 SIGINT로 즉시 종료된다 B 작업이 일시 정지(Stopped)되며 bg/ fg로 되살릴 수 있다 C 작업이 즉시 백그라운드에서 계속 실행된다 D 작업이 nohup 처리되어 로그아웃 후에도 살아남는다 systemd 환경에서 옛 런레벨 3(텍스트 다중 사용자)에 대응하는 target은?
A graphical.target B rescue.target C multi-user.target D poweroff.target systemctl enable sshd만 실행하고 start는 하지 않았을 때의 결과로 옳은 것은?
A 지금 즉시 sshd가 시작되지만 다음 부팅에는 꺼진다 B 다음 부팅부터 자동 시작되도록 등록되지만 지금 당장 실행되지는 않는다 C sshd가 완전히 삭제된다 D sshd의 unit 파일이 다시 로드된다 systemd unit 파일을 새로 작성하거나 수정한 직후 반드시 실행해야 하는 명령은?
A systemctl daemon-reloadB systemctl enableC journalctl -fD runlevelcrontab 항목 0 9 * * 1-5 /work.sh가 실행되는 시점으로 옳은 것은?
A 매월 1일부터 5일까지 오전 9시 B 평일(월~금) 오전 9시 정각 C 매주 일요일부터 목요일까지 오전 9시 D 매일 오전 9시부터 오후 5시까지 사용자 crontab과 시스템 crontab( /etc/crontab)의 형식 차이로 옳은 것은?
A 시스템 crontab에는 시간 필드가 없다 B 시스템 crontab에는 실행 사용자 필드가 추가되어 총 6필드가 된다 C 사용자 crontab은 요일 필드를 지원하지 않는다 D 두 형식은 완전히 동일하다 cron, at, batch에 대한 설명으로 옳은 것은?
A cron은 1회성, at은 반복, batch는 정해진 시각에 실행한다 B cron은 반복 실행, at은 지정한 시각에 1회, batch는 시스템 부하가 낮을 때 1회 실행한다 C at과 batch는 crond 데몬이, cron은 atd 데몬이 처리한다 D batch는 사용자가 지정한 정확한 시각에 한 번 실행한다