[Linux] 프로세스 관련 개념 간단 훑기

HYEOB KIM·2022년 8월 19일
1

Linux

목록 보기
9/11

프로세스

리눅스에서 실행되는 프로그램, 코드를 의미합니다.

프로세스는 메모리 상에 올라가 있게 되고, CPU에 의해 처리됩니다.

프로세스 스케줄링

CPU가 프로세스를 처리하는 순서를 정하는 활동을 의미합니다.
이때 스케줄링 알고리즘을 이용해서 효율적으로 프로세스를 처리할 수 있도록 합니다.

프로세스 상태

  • Running : CPU에 의해 처리되고 있는 상태
  • Waiting : CPU에 의한 처리를 기다리고 있는 상태
  • Blocked : CPU에 의한 처리를 보류하고 있는 상태(디스크에 정보를 기록하는 중이라면 CPU가 관여하지 않는 활동이고 이때 CPU는 다른 프로세스를 처리하는 것이 효율적)

프로세스 계층 구조

  • init 프로세스
  • 부모 프로세스와 자식 프로세스

프로세스는 아래와 같이 계층 구조를 갖게 됩니다.

프로세스 종료 시 문제

자식 프로세스를 종료할 때는 부모 프로세스가 관여하여 자식 프로세스를 완벽하고 깔끔하게 종료시킵니다.

프로세스를 종료할 때 이 계층 구조를 고려하지 않게 되면 고아 프로세스좀비 프로세스가 생성되게 됩니다.

  • 고아 프로세스: 부모 프로세스가 종료된 경우 자식 프로세스는 고아 프로세스가 됩니다. 이때는 init 프로세스에 자식 프로세스를 입양시켜서 init 프로세스를 통해 자식 프로세스를 종료시킬 수 있습니다.

  • 좀비 프로세스: 부모 프로세스는 자식 프로세스가 종료하려 하면 신호(signal)을 받고 자식 프로세스를 완벽히 종료시키는데, 다른 활동을 하느라 바빠서 자식 프로세스를 완벽히 종료시킬 수 없을 때 자식 프로세스는 좀비 프로세스가 됩니다. 좀비 프로세스는 동작하진 않지만 리눅스 상에 남아있게 되어 메모리를 잡아 먹는 등의 시스템 상의 리소스를 낭비하게 됩니다.

프로세스 종료 상태(exit status)

  • 프로세스가 종료될 때 넘겨주는 정보입니다.
  • 부모 프로세스에게 정보를 넘기게 됩니다.

상태 정보

  • 정상 종료 여부
  • 시그널을 받아 종료되었는지 여부
  • 코어 덤프(core dump)를 생성했는지 여부
  • 예외 처리에 쓰입니다.

표준 스트림(standard streams)

  • 표준 입력(#0) : stdin (keyboard)
  • 표준 출력(#1) : stdout (display)
  • 표준 에러(#2) : stderr (display)

파일 디스크립터(file descriptor)

  • 파일을 대변하는 객체
# 보통 코딩할 때 파일 객체를 만들고 거기다가 씁니다
fd = open(....)
write(fd, 내용)
  • 파일에 대한 작업(읽기/쓰기)을 하기 위해서는 파일 디스크립터를 열어야 합니다.
  • 프로세스를 통해 열린 파일 디스크립터 목록을 관리합니다.

데몬 프로세스(daemon process)

  • MIT 대학의 프로그래머가 만든 용어로 보이지 않는 곳에서 어떤 일을 하는 유령에서 영감을 받았다고 합니다.
  • 백그라운드 프로세스로 동작하기 위해 만들어진 프로세스
  • 쉘과의 입출력 교환이 불가능합니다.
  • 부모 프로세스를 init 프로세스로 변경합니다.

시그널(signal)

  • 비동기 이벤트를 처리하기 위한 프로세스간 통신(IPC)

동기 vs 비동기

  • 동기 : 클라이언트에서 서버에 요청을 보내고 서버가 응답을 할 때까지 기다리는 것
  • 비동기 : 클라이언트에서 서버에 요청을 보내고 서버가 응답을 할 때까지 다른 일을 하는 것

주요 시그널

외울 필요는 없지만 필요할 때 찾아볼 수 있도록 합시다.

profile
Devops Engineer

0개의 댓글