글 목록으로 돌아가기

Linux

프로세스 관리

Linux 프로세스 개념, 관리 명령, 작업 제어, 작업 예약 정리

Dohyeon Kim
Dohyeon Kim 2026년 7월 22일 · 5분 읽기
Linux AutoEverSW

1 ) 프로세스


개요

  • 현재 시스템에서 실행 중인 프로그램의 실행 단위
  • 리눅스는 다중 프로세스 시스템이므로 여러 프로세스를 동시에 실행
  • 프로세스는 부모-자식 관계
    • systemd와 kthreadd 두 프로세스를 제외하면 모든 프로세스는 부모-자식 관계

      PID

  • 프로세스를 식별하기 윟나 번호
  • 부팅 시 systemd가 1번을 가지고 실행, kthreadd가 2번
  • 유닉스에서 init이 1번이었던 것이 systemd로 변경됨

    프로세스 종류

  • 일반적인 프로세스 → 실행 후 자신의 작업이 끝나면 종료되는 프로세스
  • Deamon Process
    • 특정 서비스를 제공하기 위해 존재
    • 커널에 의해 실행되기 때문에 서비스라고도 함
    • 평소에는 대기 상태, 서비스 요청이 오면 서비스를 제공
    • 리눅스는 다양한 서비스를 제공하기 위해 여러 데몬이 동작
  • Orphen Process
    • 부모 프로세스는 종료되었는데 남아있는 자식 프로세스
    • 1번 프로세스가 고아 프로세스의 새로운 부모 프로세스가 되어 고아 프로세스가 작업을 마치고 종료될 수 있도록 해야 함
    • 자식 프로세스는 자신의 작업을 종료하면 부모 프로세스에게 돌아가야 하는데 부모 프로세스가 없으면 종료될 수 없음
  • Zombie Process
    • 자식 프로세스가 종료 정보를 보내면 부모 프로세스의 프로세스 테이블 목록에서 제거되어야 하는데 프로세스 테이블 목록에 남아있는 경우 이러한 프로세스는 프로세스 목록에 defunct 프로세스로 나오게 됨
    • 이러한 프로세스가 증가하며 프로세스 테이블 목록이 가득 차 정상적인 프로세스가 실행되지 않을 수 있음
    • 좀비 프로세스는 kill 명령으로 제거 불가
    • 2 ) 관리 명령

  • 목록 확인 명령 → ps
  • 현재 실행중인 프로세스에 대한 정보를 출력하는 명령
  • ps [option]

  • Unix Option(- 붙음)
    • e → 시스템에서 실행 중인 모든 프로세스 정보 출력
    • f → 자세한 정보 출력
    • u uid → uid
    • p pid → pid를 가진 프로세스의 정보 출력
  • BSD Option(- 붙지 않음)
    • a → 터미널에서 실행시킨 프로세스 정보 출력
    • u → 상세 정보 출력
    • x → 시스템에서 실행 중인 모든 프로세스의 정보를 출력

pgrep

  • 특정 프로세스 검색
  • pgrep [opt] [ptrn]
    • x → 패턴과 정확히 일치하는 프로세스의 정보를 조회
    • n → 패턴을 포함하고 있는 가장 최신의 프로세스 정보를 조회
    • u {userName} → 사용자가 실행한 프로세스를 조회
    • l → PID 와 프로세스 이름을 출력
    • t {terminalName} → 특정 터미널과 관련된 프로세스를 조회
  • 이 명령만으로는 프로세스 아이디 와 이름까지만 조회가 가능
  • 자주 사용하는 방식
    • ps -fp $(pgrep -x bash)

프로세스 종료

  • 프로세스 종료 시 kill 또는 pkill 사용
  • 프로세스 종료 시 상위 프로세스에게 시그널 전송 필요
  • 시그널 → 프로세스에게 무언가 발생했음을 알리는 간단한 메시지
    1	SIGNHUP - 종료할 때 발생하는 시그널로 터미널과 연결이 끊긴 것
    2	SIGNNT - 사용자가 CTRL+ c로 중지한 경우
    3	SIGQUIT - 종료 신호로 CTRL + \
    9	SIGKILL - 강제로 종료
    14	SIGALRM - 알람이 발생해서 종료
    15	SIGTERM - kill 명령이 보내는 시그널
    
  • kill 명령
    • kill [-시그널] PID
  • - pkill → 프로세스 명령 이름으로 프로세스를 찾아서 종료하는 명령

  • PID는 구별하기 위한 번호이므로 한 번에 하나만 종료되지만 pkill은 이름으로 종료하기 때문에 동일한 명령으로 수행된 모든 프로세스가 종료

  • killall → pkill 과 동일한 기능을 수행, 해당 프로세스를 소유해야

top

  • 프로세스 정보를 주기적으로 출력
  • 출력 정보
    • PID → 프로세스 ID
    • USER→ 프로세스 소유자
    • PR→ 커널이 사용하는 실제 실행 우선순위 값
    • NI → Nice 값으로 사용자가 조정하는 우선순위 값(-20 부터 19까지의 값)
    • VIRT → 가상 메모리 크기
    • RES → 프로세스가 사용하는 메모리 크기
    • SHR → 프로세스가 사용하는 공유 메모리 크기
    • %CPU → CPU 사용량
    • %MEM → 메모리 사용량
    • TIME+ → CPU 누적 사용 시간
    • COMMAND → 명령 이름
  • top 명령 수행 중 실행할 수 있는 명령
    • ENTER, SPACEBAR → 새로 고침
    • k → 프로세스 종료
    • n → 출력하는 프로세스 개수 변경
    • u → 사용자 별로 정렬
    • M → 메모리 크기에 따라 정렬
    • p → cpu 사용량에 따라 정렬
    • q → 종료

jobs

  • 백그라운드 작업을 전부 출력하는 bash의 내부 명령
  • 출력방식
    • [작업 번호] [+는 가장 최근에 접근한 작업, -는 + 바로 직전에 접근한 작업, 공백은 그 이외의 작업] [실행 중, 완료, 종료됨, 멈춤] [명령]
  • jobs [%작업번호]

작업 전환

  • ctrl + z → 포그라운드 작업을 중지
  • bg %작업번호 → 작업 번호가 지시하는 작업을 백그라운드로 전환
  • fg %작업번호 → 작업 번호가 지시하는 작업을 포그라운드로 전환

작업 종료

  • 포그라운드 작업은 Ctrl + c를 이용해서 종료
  • 다른 터미널에서 해당 프로세스의 PID를 조회해서 kill 이나 pkill 명령으로 포그라운드 작업 종료
  • 백그라운드 작업도 kill 명령으로 종료 가능

로그아웃 후에도 백그라운드 작업 계속 실행

nohup 명령 &

3 ) 작업 예약

  • 정해진 시간에 한 번만 실행 → at
    sudo apt install at
    
  • 현재 실행 대기 중인 명령의 전체 목록 → l
  • 현재 실행 대기 중인 명령 중 해당 작업 번호를 삭제 → r {작업번호}
  • 출력 결과가 없더라도 작업이 완료되면 사용자에게 메일로 알림 → m
  • 표준 입력 대신 실행할 명령을 파일로 지정 → -f {파일}
    • script 파일을 만들어 파일의 내용을 수행함
  • 정확한 날짜 및 시간 지정 → t [CC]YY]MMDDHHMM[.ss]
  • 예약된 작업 내용 확인 → c {작업번호}
  • 실행의 우선 순위를 지정 → -q <Queue>
    • 지정하는 값은 a ~ Z, A ~ Z이며, 기본값은 a
  • 시간 설정
    • 절대 시간
      • at 14:30
      • at 2026-01-10 03:00
    • 상대 시간
      • at 4pm + 3days
      • at 10am Jul 31
      • at 1am tomorrow
      • at 10:00am today
      • at now + 10minutes
    • 요일 지정
      • at 10am next Monday
  • 작업 확인 - sudo ls -l /var/spool/cron/atjobs → 파일 확인 - at -l - atq

  • 작업 예약(작성 후 종료는 Ctrl+d)

  • 사용제한
    • 시스템 관리자는 /etcat.allow파일과 etc/at.deny파일을 이용해서 사용 제한 가능
    • allow 파일에는 사용 가능한 계정 작성,
    • deny 파일에는 사용 불가능한 계정 작성
    • allow 파일을 확인해서 계정이 있으면 deny는 무시
    • allow 파일이 없으면 deny 파일에 존재하지 않는 계정 전부 사용 가능
    • 2개의 파일이 모두 없다면 root만 사용 가능
    • 초기 설정 → deny는 있지만 비어있음
  • 정해진 시간에 반복 실행 → crontab
    • crontab [-u {user}] [opt] [fileName]
    • Option
      • 사용자의 crontab 파일 수정 → e
      • crontab 파일의 목록을 출력 → l
      • crontab 파일을 삭제 → r
    • crontab 파일은 사용자 별로 생성됨 → 이 파일에 반복 실행할 내용 저장
    • 여러 개의 작업을 지정 가능
      • 한 행에 하나씩 작업 설정
  • 작업 설정
    • 분(0~59) 시(0~23) 월(1~12) 요일(0~6) 작업내용
    • 각 항목은 공백으로 구분
    • 항목의 값이 *이면 해당 항목의 모든 값을 의미
    • 범위 지정 가능(요일 필드에 1-5면 월~금) → -
    • 여러개 값 지정 가능(시간 필드에 1, 3, 5면 1시 3시 5시) → ,
    • 단계 값 지정할 때 사용 가능(1-10/2 → 1, 3, 5, 7, 9가 되며 분 필드가 */20이면 20분마다) → /
# 매일 11시 30분에 ls -al / 의 결과를 crontab.out에 기록
30 1 * * * /usr/bin/ls -al / > /home/kkr010128/crontab.out

# 실습1. at 명령으로 현재 시간보다 5분 후 ls -l /tmp > ~/at.tmp 명령을 수행

# 실습2. crontab 명령으로 매주 일요일 18시에 ~/ 의 내용을 출력해 ~/ 아래에 weekout 파일로 저장하도록 설정

댓글