#5 프로세스 라이프 사이클

유상우·2022년 8월 24일
0

프로세스 상태 모니터링

신규 프로세스 생성

  1. fork 시스템 콜로 자신을 복제
    • fork는 두개의 서로 다른값을 반환 (자신과 자식을 구별)
  2. 자식은 새 프로개름의 실행을 위해 exec 계열의 함수를 호출
    • 현재 실행하고 있는 프로그램을 다른 것으로 교체

자식 프로세스 종료

  • wait 계열 시스템 콜을 호출한 후에만 프로세스 상태정보(프로세스 디스크립터)를 삭제 할 수 있음
    => 부모가 자식 프로세스의 종료 결과를 확인할 수 있도록 설계됨
    *부모가 자식보다 먼저 죽는 경우, 커널은 예정된 wait가 없다는 것을 인지
    -> 고아 프로세스를 init process(systemd)의 자식으로 결정
    -> 자식 프로세스 종료를 위해 필요한 wait 동작을 수행

ps 명령을 사용한 프로세스 모니터링

  • 프로세스와 관련된 주요 지표들을 표시
  • 버전 마다 표시되는 정보에 차이가 있음
  • 표시 정보
    • PID, UID, 우선순위, 컨트롤 터미널
    • 프로세스별 메로리 크기, 소비한 CPU 시간, 현재 상태( 실행 중 / 중지 / 대기 등)
  • 주요 명령
    $ ps aux - 실행중인 모든 프로세스에 대한 정보를 표시
    ( a - 모든 프로세스, u - 사용자 지향적 출력, x - 터미널이 없는 프로세스도 표시 )

    TTY - 컨트롤 터미널 ID
    STAT - 프로세스 상태
    • R - 실행가능
    • T - 추적 또는 중지
    • Z - 좀비
    • I - 자식 상태의 커널 스레드
    • D - 인터럽트 불가능한 수면 상태 (보통 IO)
    • S - 인터럽트 가능한 수면 상태
    • s - 세션 리더

$ ps lax - 실행 중인 모든 프로세스 정보를 표시

top 명령을 사용한 프로세스 모니터링

  • 3초(기본값) 동안 수집한 리눅스 프로세스 정보를 지속적으로 제공하는 도구
  • 가장 CPU를 많이 사용하는 프로세스를 화면의 맨 위에 배치
  • htop은 좀 더 나은 인터페이스를 제공

프로세스 종료

  • 주로 kill 명령을 통해 프로세스를 종료 관련 시그널을 전송
    $ kill [-signal] pid
  • 주요 시그널
    • SIGRERM [15] - 실행을 완전하게 종결하라는 요청. 프로세스가 시그널 수신(처리/차단) 가능
    • SIGKILL [9] - 차단 불가능하며, 프로세스를 커널 수준에서 종료. 프로세스가 시그널을 수신 할 수 없음
    • SIGINT [2] - 터미널에서 ctrl+c 입력시 전송. 프로세그가 시그널 수신(처리/차단) 가능
  • 권장하는 프로세스 종료 방식
  • kill -15로 종료 해보고, kill -9를 시도하는 것을 권장
  • kill -9 로도 종료가 안되는 경우?
    • reboot 또는 다른 방법을 찾아야 한다
profile
Potentialist

0개의 댓글