[구름 k8s] TIL 1-2-5

Peppie·2022년 8월 13일
0

1. 프로세스 (process)

실행 중인 프로그램

프로세스 식별 번호 (PID, Process ID)

  • Linux의 모든 프로세스는 PID를 통해 관리
  • kernel의 작업 관리자가 PID를 이용하여 프로세스 관리 -> 사용자가 임의로 부여 불가능
  • PID는 양의 정수로 1번부터 차례대로 부여
  • 각 프로세스마다 기본적인 메모리 할당 -> 가상 메모리로, 32bit CPU 기준으로 4GB 할당
  • Linux 메모리 운영은 기본적으로 가상 메모리 운영을 의미

계층적 프로세스 관리 (Tree 계층 구조)

  • Linux 프로세스가 생성된다 = 부모 (parent) 프로세스가 자식 (child) 프로세스를 생성한다
    • shell에서 ls 명령 입력 : shell 프로세스가 ls 프로세스를 생성해서 실행
      => shell 프로세스가 부모 프로세스, ls 프로세스는 자식 프로세스
  • 모든 프로세스는 부모 프로세스 식별 번호 (PPID, Parent PID)를 가지고 있음
  • Linux 프로세스 중 가장 상위 PID는 1번 프로세스 -> Linux 부팅시에 생성
  • Linux shell을 운영할 때 shell이 부모 프로세스가 되고, 명령에 의해 생성된 프로세스는 자식 프로세스가 된다

부모 프로세스 역할

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

자식 프로세스 역할

  • 프로세스 동작 : 자신의 기능 확인
  • 프로세스 종료시 종료 상태를 부모 프로세스에 전달

프로세스 종류

프로세스 상태에 따른 종류

정상 프로세스

일반적인 프로세스

고아 프로세스

부모 프로세스가 먼저 종료된 상태의 프로세스, 언젠가는 좀비 프로세스가 될 수 있음
-> 통산 1번 프로세스가 부모 프로세스로 설정됨
(항상 자식 프로세스가 먼저 끝난 뒤 부모 프로세스가 종료해야 정상적)

좀비 프로세스

  • 자식 프로세스가 종료되었으나 부모 프로세스에 의해 kernel에 보고되지 않아 현재 동작중인 프로세스로 인식 (빨리 찾아서 없애는게 상책)
  • 프로세스는 종료되었으나 kernel의 프로세스 관리 목록에는 존재
  • 좀비 프로세스가 많이 존재한다는 것은 kernel의 프로세스 운영 효율이 많이 저하한다는 의미

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

foreground 프로세스

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

background 프로세스

  • 프로세스가 생성되었어도 현재 직접적인 사용자와의 상호작용 수행 X
  • 보통 프로세스 동작이 멈춰있는 경우가 많음
  • 언제든지 foreground 프로세스로 상태 변경 가능

daemon 프로세스

  • 무조건 background로 프로세스 생성
  • 사용자와 상호작용을 "절대" 하지 않음
  • 다른 프로세스 요청에 대한 응답 목적
  • Linux에서 daemon 프로세스는 이름이 d로 끝남

프로세스 관리 명령

ps 명령

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

옵션 유형

  • 유닉스 유형 : 여러 옵션을 묶어서 사용 가능, - (하이픈)을 붙여서 사용
  • BSD 유형 : 여러 옵션을 묶어서 사용, - (하이픈) 사용 X
  • GNU 옵션 : -- (하이픈 두개) 사용하고 옵션명은 full name으로, 여러 옵션 사용 불가능

ps

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

  • PID : process ID
  • TTY : 터미널 번호 (요즘은 큰 의미 X)
  • TIME : 실행 지속 시간
  • CMD : 명령어

ps -f

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

  • UID : 프로세스를 실행한 사용자 ID
  • PPID : 부모 process ID (중요시되는 요소)
  • C : CPU 사용량 (%)
  • STIME : 프로세스 시작 날짜 및 시간

ps a

현재 shell 상에서 진행시킨 프로세스 정보 출력 (BSD 유형 옵션)

STAT : 프로세스 상태

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

ps au

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

  • USER : 사용자 ID
  • %CPU : CPU 사용량
  • %MEM : 물리 메모리 사용량
  • VSZ : 사용중인 가상 메모리 크기 (KB)
  • RSS : 사용중인 물리 메모리 크기 (KB)
  • START : 프로세스 시작 시간

*메모리에 관해 : 최대 4GB까지 할당 가능하나 지금 당장 다 쓴다는 의미는 X

thread

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

  • 장점 : 프로세스에 비해 적은 자원 소모량과 쉬운 데이터 공유
    (프로세스 간 데이터 공유를 위해서는 별도 외부 도구 사용 필요),
    멀티 프로세스보다 멀티스레드가 적은 리소스를 이용하여 동시처리 가능
  • 단점 : 어려운 멀티스레드 프로그래밍

grep 명령

파일 내용 or 결과 내용에 대한 검색 패턴; grep [옵션] <검색 패턴> <파일>
ex) grep tcp /etc/services

  • <검색 패턴> 검색어, 정규표현식 사용 가능
  • -n 옵션 : 행 번호 표시
  • -i : 대소문자 구별 없이 모두 검색
  • -l : 검색 패턴이 포함된 모든 파일명 출력
  • 파이프 기능과 연계하여 많이 사용
    ex) grep -in HTTP /etc/services 는 cat /etc/services | grep -ni HTTP 와도 같은 의미

전체 프로세스 정보 확인

  • ps -e : 전체 프로세스 목록 출력 (유닉스 유형)
  • ps -ef : 전체 프로세스 상세 목록 출력 (유닉스 유형)
  • ps ax : 전체 프로세스 목록 출력 (BSD 유형), STAT 값 위주로 처리
  • ps aux : 전체 프로세스 상세 목록 출력 (BSD 유형)

ps 명령 기타 옵션

  • ps -u <사용자 이름> : 특정 사용자에 대한 프로세스 정보 출력 (유닉스 유형)
  • ps -fu <사용자 이름> : 특정 사용자에 대한 프로세스 상세정보 출력 (유닉스 유형)
  • ps -p <프로세스 ID> : 특정 프로세스 상세정보 출력

프로세스 계층 형식으로 출력

pstree [옵션] : 배포판에 따라 다소 차이

  • -a : 프로세스 생성 명령에 대한 모드 옵션 출력
  • -h : 현재 shell과 연관된 프로세스에 대하여 하이라이트로 출력 (색이 없어도 글자 굵게 표시)

2. 시그널 (signal)

인터럽트 (interrupt)

불가항력, 즉 정상처리가 아닌 특수상황에서 발생하는 일

  • 하드웨어 인터럽트 (HWI) : 하드웨어 이상에 의해 더이상 컴퓨터 시스템 운영이 어려울 때 발생
    예) RAM 고장 등

  • 소프트웨어 인터럽트 (SWI) : 소프트웨어적으로 발생하는 인터럽트

시그널

process 간 통신 방법의 한 형태
Linux kernel에 의해 프로세스에 전달되는 소프트웨어 인터럽트

시그널에 따라 해당 프로세스 동작에 영향

시그널 발생시 처리 유형

  • 미리 정해진 시그널 동작을 무조건 수행
    (Ctrl+C 키 입력시 동작이 미리 정의된 시그널에 대한 처리)

  • 무시 : 해당 프로세스에서 설정

  • 사용자 프로세스에서 시그널 처리에 대해 별도 정의하여 처리

kill 명령

시그널 발생 명령

kill [옵션, 시그널 번호] <프로세스 ID>

  • -l 옵션 : 현재 사용가능한 전체 시그널 목록 출력

    • 2번 SIGINT

      • Ctrl + C 키 입력시 발생하는 시그널
      • 기본 동작은 프로세스 강제 종료
      • 프로세스에서 무시 or 다른 처리 가능
    • 9번 SIGKILL

      • 무조건 프로세스 종료
      • 프로세스에서 무시 불가능 (이것으로 종료하면 killed 표시)

kill -9 <프로세스 ID> : 프로세스 ID에 해당하는 프로세스 종료

3. top

전체 프로세스 실시간 실행 상태 모니터링
참조)
https://sabarada.tistory.com/146
https://koromoon.blogspot.com/2020/09/top.html

화면 출력 내용

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

top 내부 명령

  • Spacebar : 내용 갱신
  • k : 프로세스 종료
  • n : 출력 프로세스 개수 변경
  • u : 사용자에 대한 정렬
  • m : 사용 메모리 크기에 따라 정렬
  • P (대문자) : CPU 사용량에 따라 정렬
  • q : top 종료

4. foreground / background

foreground 프로세스 생성

shell에서 명령 실행

background 프로세스 생성

  • shell에서 명령 실행시 명령 마지막에 '&' 추가
    -> 지속적으로 bg에서 동작
  • bg 명령을 이용한 background 프로세스로 전환
  • Ctrl + z 키 엽력을 통한 background 전환

jobs 명령

현재 shell의 background 작업 목록 출력

작업번호

= 작업순서

  • ' + ' : 최근 작업
  • ' - ' : 최근 작업 바로 전

상태

  • Running : 현재 실행 중
  • Stopping : 작업 중지
  • Done : 작업 정상 종료
  • Terminated : 작업 비정상 종료

fg / bg 전환

  • fg <%작업 번호> : background 작업을 foreground로 전환

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

5. TIF

리눅스 학습 난이도가 날이 갈수록 올라가고 있다. 리눅스 초반만 해도 "에이~ 나 이거 이미 독학으로 익힌거라 껌이네ㅋㅋ" 했지만 이젠 그럴 여유가 없다. 지난주만 해도 내 복습은 그냥 블로그에 올린 강의록을 가볍게 훑어보는 정도였지만 이번엔 좀 강도를 심화시켜야 할 것 같다. 특히 1-2-4에서의 redirection이랑 오늘의 프로세스 전반, 그리고 top. 게다가 개인적으로 궁금한 gnome-terminal까지. 이번 주말엔 할 일이 정말 많아보인다. 강사님께선 주말은 쉬라고 있는 거라고, 주중에만 열심히 공부/복습하면 된다 하셨지만 다른 사람들에겐 금방 끝나는 블로그 정리가 사실 내겐 매일 수업 끝난 후 대부분의 시간을 소요하는 일이라 실질적인 다른 공부는 결국 주말에 할 수 밖에 없는 처지기도 하고.

그렇게 바쁘고 빠듯한 와중에도 스터디 팀원분들이 정말 열심히, 열정적으로 하시는 것 같아 늘 좋은 자극이 된다. 스터디 운 좋은 듯 하다.

0개의 댓글