CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
  • Week 1
    • 1.운영체제와 커널: 리눅스가 하는 일
    • 2.리눅스의 탄생: 유닉스에서 리누스까지
    • 3.자유 소프트웨어와 오픈소스: 라이선스가 정하는 것
    • 4.배포판: 커널과 도구를 하나로 묶어 파는 단위
    • 5.Week 1 종합 복습: 리눅스라는 이름의 정체
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
    • 1.vi 편집기의 세 가지 모드
    • 2.vi 검색·치환과 다른 편집기
    • 3.프로세스의 개념과 유형
    • 4.프로세스 명령과 작업 예약
    • 5.Week 6 종합 복습: 에디터와 프로세스
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
리눅스마스터 1급 · 1급리눅스마스터 1급
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 2급/Week 6/Day 4

기준: 리눅스마스터 2급 출제 기준·오류 제보

리눅스마스터 2급· AssociateWeek 6 · Day 4읽기 약 10분
핵심 정리
  • ps는 그 순간의 목록, top은 실시간이다. ps -ef와 ps aux가 대표 조합이다.
  • kill은 죽이는 게 아니라 시그널을 보내는 명령이다. 기본 시그널은 15(TERM).
  • 강제 종료는 9(KILL) 다. kill -9 PID 형태로 쓴다.
  • 우선순위는 nice 값으로 정한다. -20이 가장 높고 19가 가장 낮다.
  • cron은 주기적으로, at은 한 번만 실행한다. crontab은 5개 필드다.

Day 4 - 프로세스 명령과 작업 예약

프로세스 보기

ps                 # 현재 터미널의 프로세스만
ps -ef             # 전체 (System V 방식)
ps aux             # 전체 (BSD 방식) — 하이픈 없음
ps -ef | grep httpd
pstree             # 부모-자식 관계를 트리로
pgrep httpd        # 이름으로 PID 찾기
형식계열특징
ps -efSystem VUID·PID·PPID·시작시각
ps auxBSDCPU·메모리 사용률까지
  • aux에는 하이픈이 없다. BSD 방식이라 그렇다. 이 표기 차이가 문제로 나온다.
  • -e는 전체(every), -f는 자세히(full)라는 뜻이다.

출력 읽기

ps -ef | head -3
# UID          PID    PPID  C STIME TTY          TIME CMD
# root           1       0  0 09:00 ?        00:00:02 /usr/lib/systemd/systemd
# root        1023       1  0 09:00 ?        00:00:00 /usr/sbin/sshd -D
 
ps aux | head -3
# USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
# root           1  0.0  0.3 171820 11520 ?        Ss   09:00   0:02 /usr/lib/systemd/systemd
# root        1023  0.0  0.2  15840  9216 ?        Ss   09:00   0:00 /usr/sbin/sshd -D
열뜻어느 쪽에 있나
PPID부모 프로세스 번호-ef에만
%CPU %MEMCPU·메모리 사용률aux에만
VSZ / RSS가상 메모리 / 실제로 쓰는 메모리 크기(KB)aux
STAT프로세스 상태 문자aux
TTY연결된 터미널. ?는 터미널이 없다는 뜻둘 다
TIME지금까지 CPU를 쓴 시간의 합둘 다
  • 부모를 알고 싶으면 ps -ef, 자원을 많이 쓰는 것을 찾으면 ps aux 다. 두 형식을 갈라 묻는 근거가 이 열의 차이다.
  • TIME은 실행된 지 얼마나 됐는지가 아니다. 종일 떠 있어도 일을 안 했으면 0:00 이다.
BSD 옵션뜻
a터미널에 연결된 모든 사용자의 프로세스
u사용자 중심 형식 — 소유자와 CPU·메모리 사용률을 함께
x터미널이 없는 프로세스(데몬)까지
  • 셋을 다 써야 "시스템 전체"가 된다. ps a만으로는 데몬이 빠진다.
  • 그 밖에 ps -u alice(그 사용자 것만), ps -p 1234(그 PID만), ps -l(우선순위 PRI·NI 열 포함)을 쓴다.
  • ps -ef | grep httpd 의 결과에는 grep httpd 자신도 한 줄 끼어 나온다. pgrep httpd 는 PID만 깔끔하게 준다.

top — 실시간

top            # 실시간 모니터링, q 로 종료
top -d 2       # 2초마다 갱신
top - 10:15:02 up  1:15,  2 users,  load average: 0.08, 0.03, 0.01
Tasks: 142 total,   1 running, 141 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.2 us,  0.5 sy,  0.0 ni, 98.1 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3736.5 total,   2105.3 free,    820.4 used,    810.8 buff/cache
 
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   1310 mysql     20   0 1794188 395220  35840 S   1.3  10.3   0:42.17 mysqld
   2314 user      20   0   24424   5376   3456 S   0.0   0.1   0:00.05 bash
위치읽는 법
1행 load average최근 1분 · 5분 · 15분의 평균 부하
2행 Tasks전체 프로세스 수와 상태별 개수. zombie 칸에서 좀비 수를 바로 본다
3행 %Cpu(s)us 사용자 프로그램, sy 커널, id 쉬는 비율, wa 입출력 대기
PR / NI우선순위 / nice 값
S상태 문자 (아래 표)
  • 위쪽 요약 + 아래쪽 프로세스 목록 두 부분으로 되어 있다. 기본으로 CPU를 많이 쓰는 순으로 정렬되어 범인이 맨 위에 온다.
  • top -p 1234(그 PID만), top -u alice(그 사용자 것만)처럼 좁혀 볼 수 있다.
키하는 일
q종료
k프로세스 종료(kill)
M메모리 사용률순 정렬
PCPU 사용률순 정렬
rnice 값 변경(renice)
u특정 사용자의 프로세스만
1CPU 코어별로 나눠 보기
h도움말
  • ps는 한 번 찍는 사진, top은 계속 움직이는 화면이다. 이 대비를 기억한다.
  • 정렬 키 M·P는 대문자, 조작 키 k·r·q는 소문자다.
명령보여 주는 것
ps그 순간의 프로세스 목록
top실시간으로 갱신되는 목록과 시스템 요약
pstree부모-자식 트리
pgrep이름에 맞는 프로세스의 PID
jobs현재 셸의 백그라운드·정지 작업

프로세스 상태 문자

문자상태
R실행 중(Running)
S대기(Sleeping)
Z좀비
T정지(Stopped)
D중단 불가 대기
  • ps aux의 STAT 칸에는 문자가 더 붙기도 한다. Ss의 s는 세션 리더, R+의 +는 포그라운드, <는 높은 우선순위, N은 낮은 우선순위다. 첫 글자가 상태다.

프로세스 종료 — kill

kill은 시그널을 보내는 명령이다. 이름 때문에 오해하기 쉽다.

번호이름하는 일
1SIGHUP터미널 끊김. 데몬은 설정 다시 읽기로 쓴다
2SIGINT인터럽트 — Ctrl+C 와 같다
9SIGKILL강제 종료. 무시할 수 없다
15SIGTERM정상 종료 요청. kill의 기본값
18/19SIGCONT / SIGSTOP재개 / 정지
kill 1234              # 15번(TERM) 을 보낸다 — 기본값
kill -9 1234           # 강제 종료
kill -15 1234          # 정상 종료 (kill 1234 와 같다)
kill -l                # 시그널 목록
killall httpd          # 이름으로 전부 종료
pkill -u alice         # 사용자 단위로 종료

9와 15의 차이가 핵심이다. 15는 "정리하고 끝내라"는 요청이라 프로그램이 저장 등 마무리를 할 수 있다. 9는 커널이 즉시 없애 버려 무시할 수 없지만 데이터가 손상될 수 있다. 먼저 15, 안 되면 9 가 순서다.

시그널을 적는 네 가지 방법

kill -9 1234           # 번호로
kill -KILL 1234        # 이름으로 (SIG 생략)
kill -SIGKILL 1234     # 이름 전체로
kill -s KILL 1234      # -s 옵션으로
  • 넷 다 같은 명령이다. 문제에는 번호와 이름이 섞여 나오므로 1·2·9·15는 양쪽으로 다 알아야 한다.
  • 가로채거나 무시할 수 없는 시그널은 SIGKILL(9)과 SIGSTOP(19) 둘뿐이다. Ctrl+Z가 보내는 것은 19가 아니라 SIGTSTP(20) 이며 이것은 프로그램이 처리할 수 있다.
  • 시그널은 자기 프로세스에만 보낼 수 있다. 남의 것에 보내면 Operation not permitted 가 나온다. root는 모두에게 보낼 수 있다.
  • 데몬의 설정을 고친 뒤 kill -HUP PID (= kill -1 PID)를 보내면 프로세스를 끝내지 않고 설정만 다시 읽게 할 수 있다.

kill · killall · pkill

명령대상을 고르는 기준예
killPID (또는 %작업번호)kill 1234
killall프로세스 이름 — 같은 이름 전부killall httpd
pkill이름의 일부, 사용자 등 조건pkill -u alice
pgreppkill과 같은 조건으로 찾기만 한다pgrep -u alice
  • kill에 이름을 주거나 killall에 PID를 주면 안 된다. "PID를 모를 때 이름으로 종료하는 명령"이 killall이다.
  • 셋 다 기본 시그널은 15번이다. 강제로 끝내려면 killall -9 httpd 처럼 똑같이 번호를 준다.

우선순위 — nice

nice -n 10 명령        # 우선순위를 낮춰 실행
renice 5 -p 1234       # 실행 중인 프로세스의 값 변경
nice                         # 0    ← 지금 셸의 nice 값
nice -n 10 ./backup.sh &     # 현재 값에 10 을 더해 실행
ps -l
# F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
# 0 S  1000    2314    2313  0  80   0 -  6106 do_wai pts/0    00:00:00 bash
# 0 S  1000    3520    2314  0  90  10 -  1827 do_wai pts/0    00:00:00 backup.sh
renice 15 -p 3520
# 3520 (process ID) old priority 10, new priority 15
구분nicerenice
대상새로 시작하는 명령이미 실행 중인 프로세스
숫자의 뜻현재 값에 더할 양바꿀 값 그 자체
대상 지정뒤에 명령을 적는다-p PID, -u 사용자, -g 그룹
생략하면nice 명령 은 10을 더한다—
  • nice는 상대값, renice는 절댓값이다. nice 값이 10인 프로세스에 renice 15 를 하면 25가 아니라 15가 된다.
  • ps -l 의 NI가 nice 값, PRI가 커널이 실제로 쓰는 우선순위다. NI가 10 늘자 PRI도 80에서 90으로 늘었다. 둘 다 숫자가 클수록 뒤로 밀린다.
  • 옛 표기에서는 -n 없이 nice -10 명령 이라고도 쓴다. 이때 하이픈은 옵션 표시라 값은 +10이다. 음수를 주려면 nice --10 명령 처럼 하이픈이 둘이 된다.
   -20  ◄──────────────────────►  19
   높음         우선순위          낮음
                 0
              (기본값)
  • 값이 작을수록 우선순위가 높다. 직관과 반대라 헷갈린다. nice는 "양보" 라고 생각하면 된다 — 많이 양보할수록(값이 클수록) 뒤로 밀린다.
  • 범위는 -20 ~ 19, 기본값은 0 이다.
  • 우선순위를 높이는 것(음수)은 root만 할 수 있다. 일반 사용자는 낮추기만 가능하다.
  • 일반 사용자는 자기 프로세스의 값을 올릴 수만 있다. 한번 올린 값을 다시 내리는 것도 "우선순위를 높이는" 일이라 기본 설정에서는 허용되지 않는다.

작업 예약

구분cronat
실행 횟수주기적으로 반복한 번만
데몬crondatd
설정crontab -eat 시각
예매일 새벽 백업오늘 밤 10시에 한 번

crontab — 5개 필드

   *  *  *  *  *   실행할 명령
   │  │  │  │  │
   │  │  │  │  └── 요일  (0-7, 0과 7이 일요일)
   │  │  │  └───── 월    (1-12)
   │  │  └──────── 일    (1-31)
   │  └─────────── 시    (0-23)
   └────────────── 분    (0-59)
예뜻
0 3 * * *매일 새벽 3시
30 2 * * 0매주 일요일 2시 30분
*/10 * * * *10분마다
0 0 1 * *매월 1일 자정
  • 필드는 5개이고 순서는 분·시·일·월·요일이다. 이 순서를 그대로 묻는다.
  • 요일은 0과 7이 모두 일요일이다.
  • *는 "매번", */n은 "n마다", 쉼표는 나열(1,15), 하이픈은 범위(1-5)다.
예뜻
0 9-18 * * 1-5평일(월~금) 9시부터 18시까지 매시 정각
0 0 1,15 * *매월 1일과 15일 자정
*/5 9-17 * * *9시대부터 17시대까지 5분마다
0 4 * * 6매주 토요일 4시
30 6 1 1 *1월 1일 6시 30분
* 3 * * *새벽 3시대에 매분 (3:00~3:59, 모두 60번)
  • 마지막 줄이 함정이다. 분 자리를 *로 두면 "그 시각에 한 번"이 아니라 "그 시간 내내 매분" 이다. 한 번만 돌리려면 분에 숫자를 넣어 0 3 * * * 로 쓴다.
  • 읽는 순서는 왼쪽부터, 숫자가 박힌 칸은 "그때만", *인 칸은 "매번"이다.
  • 일과 요일을 둘 다 숫자로 지정하면 둘 중 하나만 맞아도 실행된다. 0 0 13 * 5 는 "13일의 금요일"이 아니라 "매월 13일, 그리고 매주 금요일"이다.
   0 3 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1
   └── 시각 5칸 ──┘ └──────────── 실행할 명령 ────────────────┘
  • cron이 돌리는 작업에는 화면이 없다. 결과를 남기려면 지난주에 배운 리다이렉션으로 파일에 보낸다.
  • 명령은 절대 경로로 적는 것이 안전하다. cron이 쓰는 PATH는 로그인했을 때보다 좁다.
crontab -e         # 편집
crontab -l         # 목록 보기
crontab -r         # 전부 삭제

⚠️ -r은 확인 없이 전부 지운다. -e와 키가 붙어 있어 실수하기 쉽다.

  • root는 crontab -u alice -l 처럼 -u로 다른 사용자의 예약을 보고 고칠 수 있다.
  • 고친 내용은 저장하는 즉시 반영된다. crond를 다시 시작할 필요가 없다.
위치무엇
/var/spool/cron/사용자명사용자별 crontab이 저장되는 곳 (데비안 계열은 /var/spool/cron/crontabs/)
/etc/crontab시스템 crontab
/etc/cron.d/시스템 crontab을 파일별로 나눠 두는 곳
/etc/cron.hourly · daily · weekly · monthly넣어 둔 스크립트를 그 주기로 실행
   # /etc/crontab
   0 3 * * * root /usr/local/bin/backup.sh
             └── 실행할 사용자 — 사용자 crontab 에는 없는 칸
  • /etc/crontab에는 시각 5칸 뒤에 사용자 이름이 하나 더 들어간다. crontab -e 로 편집하는 개인 crontab에는 이 칸이 없다.
  • "crontab의 필드는 5개"는 시각을 정하는 칸을 센 것이다. 명령까지 세면 6개, /etc/crontab은 7개가 된다. 문제가 무엇을 세는지 본다.

at

at 22:00           # 오늘 밤 10시
at now + 1 hour    # 1시간 뒤
atq                # 예약 목록
atrm 3             # 3번 예약 취소
  • 명령을 입력한 뒤 Ctrl+D 로 마친다.
  • 사용 허가는 /etc/at.allow·/etc/at.deny, cron은 /etc/cron.allow·/etc/cron.deny 로 관리한다.
at 22:00
# warning: commands will be executed using /bin/sh
# at> /home/user/backup.sh
# at> <EOT>                              ← Ctrl+D 를 누른 자리
# job 3 at Wed Oct 14 22:00:00 2026
atq
# 3	Wed Oct 14 22:00:00 2026 a user
시각 표기뜻
at 22:00오늘 22시 (이미 지났으면 내일)
at 10am tomorrow내일 오전 10시
at now + 30 minutes30분 뒤
at noon / at midnight정오 / 자정
at teatime오후 4시
명령하는 일같은 것
atq예약 목록 보기at -l
atrm 번호예약 취소at -d 번호
at -f 파일 시각명령을 파일에서 읽어 예약—
  • at은 실행되고 나면 예약이 사라진다. cron처럼 남아 있지 않다. 예약을 처리하는 데몬은 atd다.

allow와 deny가 함께 있을 때

파일 상태쓸 수 있는 사용자
allow 파일이 있다거기 적힌 사용자만 — deny 파일은 보지 않는다
allow가 없고 deny만 있다deny에 적힌 사용자만 빼고 모두
둘 다 없다배포판에 따라 다르다 (root만, 또는 모두)
  • allow가 deny보다 먼저다. 두 파일에 같은 이름이 있으면 허용된다.
  • 파일에는 한 줄에 사용자 이름 하나를 적는다. root는 파일 내용과 상관없이 쓸 수 있다.
  • cron.allow·cron.deny 와 at.allow·at.deny 는 같은 규칙으로 동작한다.

내일은 이번 주의 에디터와 프로세스를 한 장으로 묶어 정리한다.

📖 용어

  • ps : 실행 중인 프로세스 목록을 한 번 출력하는 명령.
  • top : 프로세스 상태를 실시간으로 갱신하며 보여 주는 명령.
  • 시그널 : 프로세스에 보내는 신호. kill이 전달한다.
  • SIGKILL(9) : 무시할 수 없는 강제 종료 시그널.
  • SIGTERM(15) : 정상 종료를 요청하는 시그널. kill의 기본값이다.
  • nice 값 : 프로세스 우선순위. -20이 가장 높고 19가 가장 낮으며 기본은 0이다.
  • cron : 지정한 주기로 명령을 반복 실행하는 예약 도구. 필드가 5개다.
  • at : 지정한 시각에 명령을 한 번만 실행하는 예약 도구.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

다음 중 프로세스를 강제로 종료할 때 사용하는 시그널 번호로 알맞은 것은?

문제 2

다음 중 crontab 설정의 다섯 개 필드를 순서대로 바르게 나열한 것은?

문제 3

다음 중 프로세스의 우선순위를 나타내는 nice 값의 범위와 가장 높은 우선순위에 해당하는 값으로 알맞은 것은?

문제 4

다음 중 프로세스의 상태를 실시간으로 갱신하며 보여 주는 명령으로 알맞은 것은?

문제 5

다음 중 지정한 시각에 명령을 한 번만 실행하도록 예약하는 명령으로 알맞은 것은?

이전프로세스의 개념과 유형Week 6 · Day 3다음 Week 6 종합 복습: 에디터와 프로세스Week 6 · Day 5

참고 공식 자료

  • 리눅스마스터 2급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • 프로세스 보기
  • 출력 읽기
  • top — 실시간
  • 프로세스 상태 문자
  • 프로세스 종료 — kill
  • 시그널을 적는 네 가지 방법
  • kill · killall · pkill
  • 우선순위 — nice
  • 작업 예약
  • crontab — 5개 필드
  • at
  • allow와 deny가 함께 있을 때
  • 용어
  • 연습 문제