계속지나가기
코딩스뮤
계속지나가기
전체 방문자
오늘
어제
  • 코딩스뮤:)
    • Algorithm
      • 백준 문제풀이
      • 프로그래머스 문제풀이
      • 알고리즘 이론
      • 자료구조
      • SW Expert Academy
    • 인공지능(AI)
      • LLMs
      • 자연어처리(NLP)
      • 컴퓨터비전(CV)
      • 딥러닝(DL)
      • 머신러닝(ML)
      • 인공지능기초수학
      • 선형대수학
    • 컴퓨터 세팅
    • Computer Science
      • 유닉스프로그래밍
      • 프로그래밍언어론
      • 디자인패턴
      • 클린코드
      • SW 영어
      • 리눅스
      • 논리회로
    • Server
      • Docker

블로그 메뉴

  • 홈
  • Who Am I(CV)
  • 태그

공지사항

인기 글

태그

  • 알고리즘
  • LM
  • 손실함수
  • 최대유량
  • NLP
  • SIFT
  • 결정경계
  • DigitalImageProcessing
  • 기계학습
  • 에지검출
  • 언어모델
  • 패턴인식
  • 디지털이미지처리
  • DIP
  • MaximumFlow
  • networkflow
  • machinelearning
  • 지도학습
  • 비지도학습
  • 선형회귀
  • 네트워크플로우
  • ComputerVision
  • 군집화
  • 머신러닝
  • 비용함수
  • f1-score
  • ML
  • 컴퓨터비전
  • 경사하강법
  • 파이썬 클린코드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
계속지나가기

코딩스뮤

[유닉스 시스템 프로그래밍] Ch06. 프로세스 생성과 실행
Computer Science/유닉스프로그래밍

[유닉스 시스템 프로그래밍] Ch06. 프로세스 생성과 실행

2020. 10. 19. 22:51
반응형

(본 강의 노트는 한빛 아카데미의 <유닉스 시스템 프로그래밍> 책을 기반으로 하고 있습니다)

Ch06. 프로세스 생성과 실행

학습목표

  • 프로세스를 생성하는 방법을 이해한다.
  • 프로세스를 종료하는 방법을 이해한다.
  • exec함수군으로 새로운 프로그램을 실행하는 방법을 이해한다.
  • 프로세스를 동기화하는 방법을 이해한다.

목차

  1. 프로세스 생성
  2. 프로세스 종료함수
  3. exec 함수군 활용
  4. exec 함수군과 fork 함수
  5. 프로세스 동기화

01. 프로세스 생성

  • 프로그램 실행 : system( )

    • 새로운 프로그램을 실행하는 가장 간단한 방법이나 비효율적이므로 남용하지 말 것
    • 실행할 프로그램명을 인자로 지정
  • 프로세스 생성 : fork( )

    • 새로운 프로세스를 생성 : 자식 프로세스(Cv hild Process)
    • fork 함수를 호출한 프로세스 : 부모 프로세스(Parent Process)
    • 자식 프로세스는 부모 프로세스의 메모리를 복사
    • 부모 프로세스와 다른점은?
      1. 자식 프로세스는 유일한 PID, PPID를 가짐
      2. 부모 프로세스가 설정한 프로세스 잠금, 파일 잠금, 기타 메모리 잠금은 상속 안함
      3. 자식 프로세스의 tms 구조체 값은 0으로 설정
    • 부모 프로세스와 자식 프로세스는 열린 파일을 공유하므로 읽거나 쓸 때 주의
    • fork 함수를 이용한 새로운 프로세스 생성 과정

02. 프로세스 종료 함수

  • 프로세스 종료 : exit( )

    • status : 종료 상태값
    • 프로세스를 종료하고 부모 프로세스에게 종료 상태값 전달

    ![image-20201014140021225](/Users/mac/Library/Application Support/typora-user-images/image-20201014140021225.png)

  • 프로세스 종료시 수행할 작업 예약 : atexit( )

    • func : 종료시 수행할 작업을 지정한 함수명
  • 프로그램 종료 : _exit()

    • 일반적으로 프로그램에서 직접 사용하지 않고 exit함수 내부적으로 호출

03. exec 함수군 활용

  • exec 함수군
    • exec로 시작하는 함수들로, 명령이나 실행 파일을 실행할 수 있다.
    • exec 함수가 실행되면 프로세스의 메모리 이미지는 실행파일로 바뀐다
  • exec 함수군의 6가지 형태
    • path : 명령의 경로 지정
    • file : 실행 파일명 지정
    • arg#, argv : main함수에 전달할 환경변수 지정
    • envp : main함수에 전달할 환경변수 지정
    • 함수의 형태에 따라 NULL값 지정에 주의해야 함
#include <unistd.h>
int execl(const char *path, const char *arg0, ..., const char *argn, (char *)0);
int execv(const char *path, char *const argv[]);
int execle(const char *path, const char *arg0, ..., const char *argn,(char *)0, char *const envp[]);
int execve(const char *path, char *const argv[], char *const envp[]);
int execlp(const char *file, const char *arg0, ..., const char *argn, (char *)0);
int execvp(const char *file, char *const argv[]);

04. exec 함수군과 fork 함수

  • fork로 생성한 자식 프로세스에서 exec 함수군을 호출
    • 자식 프로세스의 메모리 이미지가 부모 프로세스 이미지에서 exec 함수로 호출한 새로운 명령으로 대체
    • 자식 프로세스는 부모 프로세스와 다른 프로그램 실행 가능
    • 부모 프로세스와 자식 프로세스가 각기 다른 작업을 수행해야 할 때 fork와 exec 함수를 함께 사용

05. 프로세스 동기화

프로세스 동기화

  • 부모 프로세스와 자식 프로세스의 종료 절차
    • 부모 프로세스와 자식 프로세스는 순서와 상관없이 실행하고 먼저 실행을 마친 프로세스가 종료됨
    • 부모 프로세스와 자식 프로세스 사이에 종료절차가 제대로 진행되지 않을 경우 좀비 프로세스 발생
  • Zombie Process
    • 실행 종료, 자원 반납한 자식 프로세스의 종료 상태를 부모 프로세스가 가져가지 않으면 발생
    • 프로세스 테이블에만 존재
    • 일반적인 제거 방법 없음
    • 이를 방지하기 위해 부모 프로세스와 자식 프로세스를 동기화해야 함
  • Orphan Process
    • 자식 프로세스보다 부모 프로세스가 먼저 종료할 경우 자식 프로세스들은 고아 프로세스가 됨
    • 고아 프로세스는 1번 프로세스(init)의 자식 프로세스로 등록

프로세스 동기화 함수

  • 프로세스 동기화 : wait
    • stat_loc : 상태정보를 저장할 주소
    • wait 함수는 자식 프로세스가 종료할 때까지 부모 프로세스를 기다리게 함
    • 부모 프로세스가 wait 함수를 호출하기 전에 자식 프로세스가 종료하면 wait 함수는 즉시 리턴
    • wait 함수의 리턴값은 자식 프로세스의 PID
    • 리턴값이 -1이면 살아있는 자식 프로세스가 하나도 없다는 의미
  • 특정 자식 프로세스와 동기화 : waitpid( )
    • pid에 지정할 수 있는 값
      1. if pid < -1 : pid의 절댓값과 같은 그룹ID에 속한 자식 프로세스 중 임의의 프로세스의 상태값 요청
      2. if pid == - 1: wait 함수처럼 임의의 자식 프로세스의 상태값을 요청
      3. if pid == 0 : 함수를 호출한 프로세스와 같은 프로세스 그룹에 속한 임의의 프로세스의 상태
      4. if pid > 0 : 지정한 PID의 상태값 요청
    • Options : waitpid 함수의 리턴 조건'
반응형

'Computer Science > 유닉스프로그래밍' 카테고리의 다른 글

[유닉스 시스템 프로그래밍] Ch08. 메모리 매핑  (0) 2020.11.16
[유닉스 시스템 프로그래밍] Ch07. 시그널  (0) 2020.11.04
[유닉스 시스템 프로그래밍] Ch05. 프로세스 정보  (0) 2020.10.19
[유닉스 시스템 프로그래밍] Ch04. 시스템 정보  (0) 2020.10.19
[유닉스 이론과 실습] ch06. 파일 접근 권한 관리하기  (0) 2020.10.19
    'Computer Science/유닉스프로그래밍' 카테고리의 다른 글
    • [유닉스 시스템 프로그래밍] Ch08. 메모리 매핑
    • [유닉스 시스템 프로그래밍] Ch07. 시그널
    • [유닉스 시스템 프로그래밍] Ch05. 프로세스 정보
    • [유닉스 시스템 프로그래밍] Ch04. 시스템 정보
    계속지나가기
    계속지나가기
    NLP Engineer

    티스토리툴바