02. 리눅스 운영 및 관리 - 3

castlehi·2022년 2월 28일
0

LinuxMaster Level2

목록 보기
6/12
post-thumbnail

03. 프로세스 관리

Section 1 : 프로세스의 개념 및 유형

프로세스

  • 중앙처리장치(CPU)를 할당받아 실행
  • 비동기적 행위를 일으키는 주체
  • 프로세스마다 고유한 프로세스 ID(PID)를 가짐
  • 최상위 프로세스는 'init'이며, 가장 먼저 실행되는 프로세스로 PID는 '1'

프로세스 유형

  1. 포그라운드(foreground)와 백그라운드(background)
    1) 포그라운드

    유형설명
    포그라운드
    (foreground)
    - 대화식 작업
    - 입력한 명령어 실행이 결과가 나올 때까지 기다리는 방식
    - 일반적인 명령 실행 방식

    2) 백그라운드

    유형설명
    백그라운드
    (background)
    - 다른 프로세스 실행 가능
    - 명령어를 실행하면 곧바로 다음 명령어 실행 가능
    - '$'기호 사용
  2. fork()와 exec()

    • 다른 프로세스를 실행시키기 위해 사용하는 시스템 호출

    1) fork()

    유형설명
    fork()- 메모리 할당하고, 기존 프로세스를 복제
    - 프로세스가 하나 더 생성되고, 프로세스 ID(PID)도 다른 프로세스가 생성
    - 원본 프로세스를 부모프로세스(parent process)라고 함
    - 복제된 프로세스를 자식프로세스 (child process)

    2) exec()

    유형설명
    exec()- 호출된 프로세스만 메모리에 남게 됨
    - 생성되는 새로운 프로세스는 없음
    - 프로세스의 PID가 그대로 새로운 프로세스에 적용되며, 호출한 프로세스는 새로운 프로세스에 의해 덮어쓰게
  3. 데몬(Daemon)

    • 시스템 부팅 시, 실행되는 백그라운드 프로세스
    • 사용자의 요청을 기다리고 있다가 요청이 오면 적절히 대응
    • 독립적으로 수행, 항상 메모리에 상주

    1) Standalone

    • 독립적인 실행방식
    • 메모리에 항상 상주하므로, 서버 부하가 적음
    • 빠른 응답을 필요로 하는 경우에 이용
    • 실행 스크립트 : /etc/init.d

    2) (x)inetd

    • 다른 데몬들의 상위 데몬(슈퍼 데몬)
    • 자체적으로 메모리에 상주하는 독립 데몬으로 여러 다른 데몬들을 제어, 관리
    • 이 유형의 데몬들은 '(x)inetd' 데몬에 의해 활성화
    • 간헐적인 서비스에 이용
    • 필요할 때마다 메모리에 적재하여 사용하고, 서비스가 종료되면 해제해야 하므로 서버 부하가 많음
    • 실행 스크립트 경로 : /etc/xinted.d
  4. 시그널(Signal)

    • 제한된 형탵의 프로세스 간 통신
    • 특정 이벤트가 발생했을 경우 프로세스에 전달하는 신호
    • 다른 프로세스에 메시지를 보낼 때 사용
    번호시그널발생 조건
    1SIGHUP터미널과 연결이 끊어졌을 때
    2SIGINT키보드로부터 오는 인터럽트 시그널 (Ctrl + c)
    3SIGQUIT키보드로부터 오는 실행 중지 시그널 (Ctrl + \)
    6SIGABRT비정상 종료
    9SIGKILL강제 종료 시
    14SIGALRM알람에 의해 발생
    15SIGTERM'kill' 시스템 호출 시
    18SIGCONT중지된 프로세스 재실행 시
    19SIGSTOP'SIGCONT' 시그널을 받을 때까지 프로세스 중지
    20SIGTSTP실행 정지 후 다시 실행을 계속하기 위해 대기시키는 시그널 (Ctrl + z)

Section 2 : 프로세스 관리 유틸리티

프로세스 관련 명령어

  1. ps

    • 현재 실행 중프로세스의 상태

    1) 기본 형식

    [root@localhost ~]#ps [옵션]
    옵션설명
    -a모든 프로세스 출력
    -e커널 프로세스를 제외한 모든 프로세스 출력
    -f풀 포맷으로 출력
    -l프로세스 목록 출력
    -o출력 포맷을 지정
    -p특정 PID를 지정
    -r현재 실행 중인 프로세스 출력
    -u특정 사용자의 프로세스를 확인
    -x접속된 터미널뿐만 아니라 사용 중인 모든 프로세스 출력

    2) 모든 프로세스를 풀(full) 포맷으로 출력

    항목설명
    USER프로세스 소유자명
    PID프로세스 식별 번호
    %CPUCPU 사용률
    %MEM메모리 사용률
    VSZ가상 메모리 사용량
    RSS실제 메모리 사용량
    TTY프로세스와 연결된 터미널
    START현재 프로세스 상태
    D : 입출력 작업이 끝나기를 기다리는 정지 상태
    P : 수행 가능, 수행 중인 상태
    R : 현재 실행 상태
    S : 잠든 상태
    T : 정지 상태
    Z : 좀비 프로세스. 부모 프로세스로부터 회수되지 않아 아직 메모리에 적재되어 있는 상태
    START프로세스 시작 시간
    TIME총 CPU 사용 시간
    COMMAND실행 명령

    3) 자세한 프로세스 목록 출력

    항목설명
    F프로세스 플래그
    S프로세스 상태
    UID프로세스 소유자의 UID
    PID프로세스 식별 번호
    PPID부모 프로세스 식별 번호
    C짧은 시간 cpu 사용률
    PRI프로세스 우선순위(값이 작을수록 우선순위가 높음)
    NI우선순위 계산 시 사용하는 'nice'값
    ADDR메모리 안의 프로세스 주소
    SZ프로세스 크기
    WCHAN프로세스가 대기나 수면 상태에서 기다리는 시간
    TTY프로세스와 연결된 터미널
    TIME총 CPU 사용 시간
    CMD실행 명령
  2. pstree

    • 실행 중인 프로세스를 트리(tree) 구조로 출력

    1) 기본 형식

    [root@localhost ~]# pstree [옵션][PID/user]

    2) 옵션

    옵션설명
    -a모든 프로세스 식별자(PID) 출력
    -c중복된 프로세스도 모두 출력
    -G'VT100' 형태의 트리 구조로 출력
    -h해당 프로세스와 프로세스의 부모 프로세스를 음영으로 강조
    -H지정한 PID의 프로세스와 부모 프로세스를 음영으로 강조
    -l긴 행으로 모든 정보 출력
    -n프로세스 식별자(PID)를 기준으로 정렬하여 출력
    -p프로세스 식별자(PID)도 출력
    -u사용자 식별자(UID)도 출력
    -UUTF-8 형태로 출력
  3. top

    • 프로세스 상태를 실시간으로 확인하거나 모니터링
    • 시스템의 상태를 전반적으로 빠르게 파악
    • 'interval'간격 (기본3초)로 화면을 갱신하여 정보를 출력

    1) 기본 형식

    [root@localhost ~]# top [옵션][PID]

    2) 옵션(실행 전)

    옵션설명
    -b순간의 정보 확인(batch 모드)
    -d실시간으로 화면 출력 interval 시간 지정
    -n실행 주기 지정(반복 횟수)
    -p모니터링할 프로세스 식별자(PID) 지정

    3) 옵션(실행 후)

    옵션설명
    a메모리 사용량을 기준으로 출력
    b배치(bacth)모드로 작동
    1CPU 코어별로 사용량 출력
    fSort필드 선택 화면 -> q를 누르면 'RES' 기준으로 정렬
    q실행 종료
    Shift + m메모리 사용량 기준으로 정렬(내림차순)
    Shift + pCPU 사용량 기준으로 정렬(내림차순)
    Shift + t프로세스의 사용 시간을 기준으로 정렬
  4. nohup

    • 프로세스를 중단하지 않고, 백그라운드(background) 작업을 수행할 수 있게 함
    • 'nohup.log' 로그 파일 생성

    1) 기본 형식

    [root@localhost ~]# nohup [실행 파일] &

    2) 로그 안 남기기

    [root@localhost ~]# nohup [실행 파일] 1>/dev/null 2>&1 &

    3) 종료하기

    • 해당 프로세스 찾아서 'kill' 명령어로 종료
    [root@localhost ~]# ps -aux | grep [실행 파일]
    [root@localhost ~]# kill -9 [PID]
  5. jobs

    • 백그라운드로 실행 중인 프로세스를 확인

    1) 기본 형식

    [root@localhost ~]# jobs [옵션][작업번호]

    2) 옵션

    옵션설명
    -l프로세스 그룹 ID를 'state'필드 앞에 출력
    -n프로세스 그룹 중에 대표 프로세스 ID 출력
    -p각 프로세스 ID에 대해 한 행씩 출력
  6. fg, bg

    • 포그라운드와 백그라운드로 실행하는 명령어
    • 포그라운드에서 백그라운드, 백그라운드에서 포그라운드로 전환 가능

    1) 기본 형식

    [root@localhost ~]# fg %[작업 번호], bg %[작업 번호]
  7. nice

    • 실행할 프로그램의 우선순위를 지정
    • 기본 'nice'값은 보통 '0'이고 조정 범위는 '-20~19'까지 가능
    • 수치가 낮을수록 우선순위가 높다
    • 일반 사용자는 'nice'값을 증가만 할 수 있음

    1) 기본 형식

    [root@localhost ~]# nice [옵션][설정값][실행 프로그램명]

    2) 옵션

    옵션설명
    -n'nice'값 조정 수치 지정
  8. renice

    • 이미 실행 중인 프로세스의 우선순위를 변경
    • 지정한 'nice'값을 바로 적용

    1) 기본 형식

    [root@localhost ~]# nice [옵션][설정값][PID]

    2) 옵션

    옵션설명
    -g그룹명 지정
    -u사용자 명 지정
  9. kill

    • 프로세스에 특정한 시그널을 보냄
    • 종료되지 않은 프로세스를 종료

    1) 기본 옵션

    [root@localhost ~]# kill [옵션][PID]

    2) 옵션

    옵션설명
    -lSignal의 종류 출력
    -s특정 Signal 지정
    -1프로세스 재시작
    -9프로세스 강제 종료
  10. killall

    • 프로세스 으로 종료
    • 여러 프로세스를 한 번에 종료

    1) 기본 형식

    [root@localhost ~]# killall [옵션][프로세스 명]

    2) 옵션

    옵션설명
    -i종료 전 확인
    -I프로세스 명에 대소문자 구별하지 않음
    -g프로세스 그룹 종료
    -o지정 시간 이후 프로세스 종료
    -l모든 시그널명 출력
    -s'SIGTERM' 대신 해당 시그널로 전송
    -u해당 사용자로 실행된 프로세스만 종료
    -v시그널이 성공적으로 전송될 경우 출력
    -w프로세스가 종료될 때까지 대기

작업 스케줄링

  1. cron

    • 주기적으로 반복되는 작업을 자동적으로 실행

    1) 기본 형식

    [root@localhost ~]# crontab [옵션]

    2) 옵션

    옵션설명
    -e'crontab'을 설정하거나 변경
    -l'crontab'설정 내용 출력
    -r'crontab'설정 내용 제거
    -u특정 사용자의 작업 스케줄 수정
profile
Back-end Developer

0개의 댓글

관련 채용 정보