220812 TIL 프로세스 관리

sundays·2022년 8월 12일
0

프로그램 실행

  • 실행할 프로그램 파일( binary 파일 )을 메모리에 로드( load ) - I/O Device -> memory
  • 로드된 프로그램 코드중 프로그램 시작점을 찾아서 동작 - memory -> CPU
  • 프로그램 동작 - CPU <-> memory
    • 프로그램 코드 - 동작 절차
    • 데이터 - 동작 절차상 필요한 값, 처리 결과
  • 프로그램 종료점을 만나면 프로그램 종료 - memory에 있는 프로그램 코드는 삭제( 사용을 하지 않는다 )
  • Linux shell 명령을 입력한다는 것은 프로그램 실행과 같은 의미
  • Linux는 여러 프로그램을 동시에 실행 할 수 있다 - Multi Tasking( Multi Processing )
  • Linux에서는 실행중인 프로그램을 프로세스( Process ) 라고 하고 Kernel의 작업 관리자에 의해서 관리되고 있다.
  • 프로그램( Program ) - 보조 기억 장치에 저장된 실행 가능한 파일( binary 형태 )
  • 프로세스( Process ) - 메모리상에서 동작중인 프로그램

프로세스( Process )

  • 실행 중인 프로그램

  • Linux에서 모든 프로세스에는 프로세스 식별 번호( PID, Process ID )를 통해 관리 한다.

  • PID는 프로세스 자신 식별 번호

  • Kernel의 작업 관리자가 PID를 이용하여 프로세스 관리

  • PID는 양의 정수로 부여하고 1번부터 차례대로 부여

  • PID 관리는 Kernel의 작업 관리자가 관리하므로 사용자가 임의로 부여할 수 없다.

  • 각 프로세스마다 기본적인 메모리 할당 - 가상 메모리로 할당, 32bit CPU 기준으로 4 GB 할당

  • Linux 메모리 운영은 기본적으로 가상 메모리 운영을 의미

  • Linux에서 프로세스 관리는 계층적으로 관리

  • Linux에서 프로세스가 생성된다는 의미는 부모( parent ) 프로세스가 자식( child ) 프로세스 생성을 의미

  • 예로 shell에서 ls 명령을 입력한다는 것은 shell 프로세스가 ls 프로세스를 생성해서 실행 한다는 의미

  • shell 프로세스 부모 프로세스가 되고, ls 프로세스가 자식 프로세스가 된다.

  • 부모 프로세스 식별 번호인 부모 프로세스 식별 번호( PPID, Parent PID )가 모든 프로세스는 가지고 있다.

  • Linux 프로세스중 가장 상위 프로세스 ID는 1번 프로세스 - Linux booting시에 생성

  • Linux shell을 운영할 때 shell 프로세스가 부모 프로세스가 되고 입력하는 명령에 의해 생성된 프로세스는 자식 프로세스가 된다.

  • 부모 프로세스 역할

    • 자식 프로세스 생성
    • 자식 프로세스 동작 상태 확인
    • 자식 프로세스 종료에 따른 처리 - Kernel에 종료 알림
  • 자식 프로세스 역할

    • 프로세스 동작 - 자신의 기능 수행
    • 프로세스 종료시 종료 상태를 부모 프로세스에 전달

프로세스 종류

프로세스 상태에 따른 종류

  • 정상 프로세스

  • 일반적인 프로세스

  • 고아 프로세스
    부모 프로세스가 먼저 종료된 상태의 프로세스
    언젠가는 좀비 프로세스가 될 수 있다.
    따라서 통산 1번 프로세스가 부모 프로세스로 설정된다.

  • 좀비 프로세스
    자식 프로세스가 종료 되었으나 부모 프로세스에 의해 Kernel에 보고 되지 않아 현재 동작중인 프로세스로 인식
    프로세스는 종료 되었으나 Kernel의 프로세스 관리 목록에는 존재하는 프로세스
    좀비 프로세스가 많이 존재한다는것은 Kernel의 프로세스 운영 효율이 떨어진다.
    프로세스 관리 시점에 상태값으로 확인 가능

프로세스 실행 형태에 따른 종류

  • foreground 프로세스
    사용자와 상호 작용이 가능한 프로세스
    하나의 프로세스만 foreground 프로세스가 된다.

  • background 프로세스 : 사용자와 상호 작용을 수행하지 않는 프로세스

    • background 프로세스는 프로세스는 생성되었지만 현재 직접적인 사용자 상호 작용을 할 수 없는 프로세스 의미
    • background 프로세스는 보통 프로세스 동작이 멈추어 있는 경우가 많다.
    • background 프로세스는 언제든지 foreground 프로세스로 상태가 변경될 수 있다.
  • daemon 프로세스
    무조건 background로 프로세스 생성
    사용자와 상호 작용을 절대 하지 않는다.
    다른 프로세스 요청에 대한 응답을 목적으로 하는 프로세스
    Linux에서 daemon 프로세스는 프로세스 이름이 d 로 끝난다.

프로세스 관리 명령

ps

ps [ 옵션 ] : 현재 동작중인 프로세스 확인 명령

옵션 유형
  • 유닉스 유형 - 여러 옵션을 묶어서 사용 가능, -( 하이픈 )을 붙여서 사용

  • BSD 유형 - 여러 옵션을 묶어서 사용, -( 하이픈 )을 사용하지 않고 옵션 사용

  • GNU 옵션 - -( 하이픈 두 개 ) 사용하고 옵션면은 full name을 사용, 여러 옵션 사용은 불가능

  • ps - 현재 shell 상에서 실행되고 있는 프로세스 목록 출력

    • PID - process ID
    • TTY - 터미널 번호
    • TIME - 실행 시간
    • CMD - 명령어
  • ps -f - 현재 shell 상에서 실행되고 있는 프로세스 목록을 상세 정보 출력

    • UID - 프로세스를 실행한 사용자 ID
    • PPID - 부모 process ID
    • C - CPU 사용량( % )
    • STIME - 프로세스 시작 날짜 및 시간
  • ps a - 현재 shell에서 실행시킨 프로세스 정보 출력( BSD 유형 옵션)

    • STAT - 프로세스 상태
    • R - 실행( running ) 중
    • S - 인터럽트( interrupt )가 가능한 대기( sleep ) 상태
    • T - 작업 제어에 의해 정지된 상태
    • Z - 좀비 프로세스
    • STIME - 프로세스 시작 날짜 시간
    • s - 세션 리더 프로세스
    • +- foreground 프로세스 그룹
    • l - 멀티 스레드( thread )

스레드( thread )

  • process 내에서 동작하는 실행 흐름

  • 스레드는 프로세스에 비해 자원 소모량이 적다.

  • 스레드는 프로세스에 비해 데이터 공유가 쉽다.

  • 프로세스간에 데이터 공유를 위해서는 별도의 외부 도구를 사용해야 한다.

  • 멀티 프로세스보다 멀티 스레드가 적은 리소스를 이용하여 동시 처리가 가능한 장점

  • 멀티 스레드 단점은 프로그래밍이 어렵다.

  • ps au - 현재 shell에서 실행시킨 프로세스 상세 정보 출력( BSD 유형 옵션

    • USER - 사용자 ID
    • %CPU - CPU 사용량
    • %MEM - 물리 메모리 사용량
    • VSZ - 사용중인 가상 메모리 크기( KB )
    • RSS - 사용중인 물리 메모리 크기( KB )
      -START - 프로세스 시작 시간
  • grep 명령 - 파일 내용 또는 결과 내용에 대하여 검색 패턴에 대한 검색
    grep [ 옵션 ] <검색 패턴> <파일>
    <검색 패턴> - 검색어( 문자열 ), 정규 표현식 사용 가능
    -n 옵션 - 행 번호 표시
    -i 옵션 - 대소문자 구별없이 모두 검색
    -l 옵션 - 검색 패턴이 포함된 모든 파일명 출력
    파이프 기능과 연계해서 많이 사용

  • 전체 프로세스 정보 확인
    ps -e - 전체 프로세스 목록 출력( 유닉스 유형 )
    ps -ef - 전체 프로세스 상세 목록 출력( 유닉스 유형 )
    ps ax - 전체 프로세스 목록 출력( BSD 유형 )
    ps aux - 전체 프로세스 상세 목록 출력( BSD 유형 )

  • ps 명령 기타 옵션
    ps -u <사용자 이름> - 특정 사용자에 대한 프로세스 정보 출력( 유닉스 유형 )
    ps -fu <사용자 이름> - 특정 사용자에 대한 프로세스 상세 정보 출력( 유닉스 유형 )
    ps -p - 특정 프로세스 상세 정보 출력

  • 프로세스 계층 형식으로 출력
    pstree [ 옵션 ]
    -a 옵션 - 프로세스 생성 명령에 대한 모드 옵션 출력
    -h 옵션 - 현재 shell과 연관된 프로세스에 대하여 하이라이트로 출력

시그널( Signal )

  • 인터럽트( Interrupt )
    불가항력 상황에서 발생하는 일, 즉 정상적인 처리가 아니고 특수 상황에 발생하는 일
    하드웨어 인터럽트( HWI ) - 하드웨어 이상에 의해 더이상 컴퓨터 시스템 운영이 어려울 때 발생
    소프트웨어 인터럽트( SWI ) - 소프트웨어 적으로 발생하는 인터럽트

  • 시그널( Signal )
    Linux Kernel에서 의해서 프로세스에게 전달되는 소프트웨어 인터럽트
    시그널에 따라 해당 프로세스 동작에 영향을 미친다.
    시그널 발생시 처리 유형
    미리 정해진 시그널 동작을 무조건 수행
    ctrl + c키 입력시 동작이 미리 정의된 시그널에 대한 처리
    무시 - 해당 프로세스에서 설정
    사용자 프로세스에서 시그널 처리에 대하여 별도 정의해서 처리

  • kill 명령 - 시그널 발생 명령
    kill [ 옵션, 시그널 번호 ] <프로세스 ID >
    -l 옵션 - 현재 사용 가능한 전체 시그널 목록 출력

  • 2번 SIGINT
    ctrl + c 키 입력시 발생하는 시그널
    기본 동작은 프로세스 종료
    프로세스에서 무시하거나 다른 처리 가능

  • 9번 SIGKILL
    무조건 프로세스 종료
    프로세스에서 무시할 수 없음
    kill -9 <프로세스 ID> - 프로세스 ID에 해당하는 프로세스 종료

top

전체 프로세스 실시간 실행 상태 모니터링

  • top

    • PID - process ID
    • USER - 사용자
    • PR - 우선순위
    • NI - Nice 값
    • VIRT - 프로세스 사용 가상 메모리 크기
    • RES - 프로세스 사용 물리 메모리 크기
    • SHR - 프로세스 사용 공유 메모리 크기
    • %CPU - CPU 사용량
    • %MEM - 메모리 사용량
    • TIME+ - CPU 누적 이용 시간
    • COMMAND - 명령
  • top 내부 명령

    • space bar - 내용 갱신
    • k - 프로세스 종료
    • n - 출력 프로세스 개수 변경
    • u - 사용자에 대한 정렬
    • M - 사용 메모리 크기에 따라 정렬
    • P - CPU 사용량에 따라 정렬
    • q - top 종료

fore/background 프로세스 관리

  • foreground 프로세스 생성
    shell에서 명령 실행

  • background 프로세스 생성
    shell에서 명령 실행시 명령 마지막에 & 추가
    bg 명령을 이용한 background 프로세스로 전환
    ctrl + z 키 입력을 통한 background 전환

  • jobs 명령

    • 현재 shell의 background 작업 목록 출력
    • jobs
      작업 번호 - 작업 순서
      +: 최근 작업
      -: 최근 작업 바로 전
      상태
      Running - 현재 실행 중
      Stopping - 작업 중지
      Done - 작업 정상 종료
      Terminated - 작업 비정상 종료
  • fore/background 전환
    fg <%작업번호>
    background 작업을 foreground로 전환

  • bg <%작업번호>
    background 로 전환

crontab

  • 정해진 시간에 반복적으로 명령 실행

  • crond( daemon process )에 의해 crontab 파일 내용을 참조하여 자동으로 정해진 작업 수행

    • crontab [ 옵션 ] <파일명>
      • -e : crontab 파일 편집
      • -l : crontab 파일 내용 출력
      • -r : crontab 파일 삭제
    • crontab 파일 편집 명령
    • crontab 파일 초기 내용은 주석( comment, #으로 시작 )으로만 구성
  • crontab 파일 내용
    30 * * * * /usr/bin/ls -FR / > ~worker/cron.out

    • 매시간 30분 마다 자동으로 /usr/bin/ls -FR > ~worker/cron.out 명령 실행
    • 30 - 분( 0 ~ 59 ), *는 설정하지 않는다.
      • 시( 0 ~ 23 ), *는 설정하지 않는다.
      • 일( 1 ~ 31 ), *는 설정하지 않는다.
      • 월( 1 ~ 12 ), *는 설정하지 않는다.
      • 요일( 0 ~ 6 ), *는 설정하지 않는다.
    • /usr/bin/ls -FR > ~worker/cron.out - 작업 내용

crontab -e 명령으로 crontab 파일에 정해진 시간에 작업할 내용을 등록

profile
develop life

0개의 댓글