티스토리 뷰

Linux

5. 프로세스와 시그널

Howu 2023. 4. 3. 19:29

1) 프로세스

  • 실행중인 Program
  • 프로그램 VS 프로세스
    • 프로세스: CPU가 메모리 상에서 실행
    • 프로그램: 디스크 상에서 실행
  • 프로그램의 실행

2) 프로세스 스케쥴링(Process Scheduling)

  • 여러 프로그램의 동시 실행
    • CPU가 적절히 처리를 해줘야 많은 프로세스들이 잘 실행될 수 있다.
    • 애플리케이션의 성능 특성에 따라 자원 소모를 고려할 수 있다.
    • CPU 개수가 늘어나면 프로세스 동작이 좋아진다.
    • core 수가 증가하면 성능 수가 높아진다.
  • 어떻게 모두를 만족시킬 것인가?

 

3) 프로세스 상태(process state)

  • 프로세스 전이 다이어그램(process transition diagram)
    • Created 
    • Wating: 프로세스 대기 상태
    • Running: CPU의 프로세스 실행
    • Blocked: HDD의 파일 읽는 것을 block
    • Terminated

 

4) 프로세스 계층 구조

  • PID(Process ID)
  • 부모 프로세스와 자식 프로세스: 모든 프로세스는 부모 프로세스가 있다.
  • init 프로세스: kernel이 memory에 올라가서 H/W의 자원을 초기화 한다.
  • 프로세스 종료 처리
  • 고아 프로세스와 좀비 프로세스
    • 프로세스 종료 처리가 제대로 되지 않았을 경우 생기는 문제들
    • 고아: 종료 처리를 해주어야 할 부모 프로세스가 없는 고아 프로세스, init프로세스는 리눅스가 종료될 때까지 항상 있으므로 부모 프로세스가 없을 때 부모가 되어 종료 처리를 해준다. (최상위 부모의 종료 처리)
    • 좀비: 1) 자식 프로세스가 죽을 때까지 기다림 2) 자식 프로세스가 죽을 것이라는 Signal을 받게 되면 그 때 자식 프로세스를 종료 처리해준다.

 

5) 프로세스 종료 상태

  • 프로세스 종료 상태
    • 프로세스가 종료될 때 넘겨주는 정보
    • 부모 프로세스에게 정보를 넘기게 됨
  • 상태 정보
    • 0: 성공 / 1: 실패 
    • 정상 종료 여부
    • Signal을 받아 종료되었는지 여부 및 Signal의 종류
    • Core dump를 생성했는지 여부

 

6) 표준 스트림과 파일 디스크립터(standard streams)

  • 표준 입력(standard input): stdin(Keyboard)
  • 표준 출력(standard output): stdout(Display)
  • 표준 에러(standard error): stderr(Display)
  • 파일 디스크립터(file descriptor)
    • fd = open(...)
    • write(fd, 내용) 
    • 파일을 대변하는 객체
    • 파일에 대한 작업(읽기/쓰기)을 하기 위해서 파일 디스크립터를 열어야 함
    • 프로세스로 열린 파일 디스크립터 목록을 관리

 

7) 포어그라운드(foreground) 프로세스와 백그라운드(background) 프로세스

  • 포어그라운드 프로세스
    • 쉘의 표준 입력이 연결된 프로세스
    • 표준 출력과 표준 에러도 쉘과 연결되어 있음
  • 백그라운드 프로세스
    • 쉘의 표준 입력이 연결되지 않은 프로세스
      • 사용자 입력 필요없이 프로세스를 여러 개 실행시킬 수 있는 조건
    • 표준 출력과 표준 에러는 쉘과 연결되어 있음

 

8) 데몬 프로세스(daemon process)

  • 악마 프로세스
    • MIT 대학의 프로그래머가 만든 용어로 보이지 않는 곳에서 어떤 일을 하는 유령에서 유래
  • 데몬 프로세스
    • 백그라운드 프로세스로 동작하기 위해 만들어진 프로세스
    • 표준 스트림을 갖고 시작하지만 모두 닫아 버림 -> 쉘과의 입출력 교환 불가
    • 부모 프로세스를 init 프로세스로 변경

 

9) 시그널(signal)

  • 비동기 이벤트를 처리하기 위한 프로세스간 통신
  • 동기(Synchronous) VS 비동기(Asynchronous)
  • 동기: Client가 요청을 보내고 응답이 올 때까지 기다린다.
  • 비동기: Client가 요청을 보내고 Continue Working 그리고 응답을 받고 어떤 일을 한다.
시그널 이름 의미 기본 처리
SIGCHILD 자식 프로세스 종료 무시
SIGINT 사용자가 인터럽트(Ctrl+C)를 생성 정지
SIGKILL 프로세스 종료 명령 종료
SIGTERM 프로세스 종료 명령(조건에 따른 처리) 종료

 

10) 프로세스 목록 조회 및 구조 파악

$ ps //report a snapshot of the current processes.
$ ps -f //UID, PID, PPID(부모 프로세스의 ID),STIME(실행시작시간)
$ ps -ef
$ ps -ef --forest //gnome terminal server-bash라는 프로세스의 자식
$ echo $$ //bash의 프로세스가 무엇인지 알 수 있다.
$ vim process.sh //vim으로 process 쉘스크립트 파일 생성
$ chmod 0755 process.sh
$ ./process.sh //현재 경로에서 스크립트 실행
  • 프로세스의 부모가 init프로세스라고 해서 무조건 데몬 프로세스라고 할 수는 없다.
  • 자식 프로세스로 실행되는 프로세스들
  • bash에서 스크립트를 실행하면 별도의 프로세스로 실행된다. echo $$로 출력하는 pid가 bash의 pid라면 명령어를 통해 출력하는 pid는 process.sh의 pid이다.

 

11) 프로세스 종료 상태

$ echo $? //직전의 exit status가 무엇인지 알려줌

 

12) 시그널 전송

$ kill -l //Signal의 종류 목록
$ kill -9 종료시키고자 하는 pid번호 //실행중인 프로세스를 종료 => 죽었음
$ kill -TERM pid번호 //실행중인 프로세스를 종료 => 종료됨
$ kill -ABRT pid번호 //실행중인 프로세를 종료하되 코어 덤프
$ ulimit -a //core 파일에 대한 정보 확인
$ ulimit c size //core 파일에 대한 사이즈 설정
  • ctrl + C로 bash가 sigINT를 전송

 

13) 포어그라운드 프로세스와 백그라운드 프로세스

* 디폴트로 포어그라운드 프로세스 실행

  • 사용자의 입력을 줄 수 있는 상태

* 백그라운드 프로세스 실행법

$ ./process.sh & //사용자 입력 ctrl+z나 ctrl+c의 명령이 통하지 않는다.

 

'Linux' 카테고리의 다른 글

6. 리디렉션과 파이프라인  (0) 2023.04.03
4. 사용자와 그룹  (0) 2023.04.03
3. 파일  (0) 2023.04.03
[error] 우분투 전체화면 안되는 현상 해결하기  (0) 2023.04.01
2. 최소한의 커맨드라인 사용법  (0) 2023.03.31
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함