프로세스

프로세스 정의

  • 커널에 등록되어 관리를 받는 실행 중인 프로그램
    • 커널은 프로세스 관리 블록(PCB)에 프로세스에 관한 정보를 저장
    • 프로세스는 시스템 자원을 사용하며 여러 상태 변화를 겪음
    • 각 프로세스는 유일한 PID를 가짐

  • 프로세스 예
    • systemd 프로세스는 PID가 1
      • 모든 사용자 프로세스의 조상 프로세스
    • 로그인을 하거나 터미널 창을 열면 ‘bash 프로세스’가 할당됨
    • 필요에 따라 프로세스는 자식 프로세스를 생성함
    • 데몬 프로세스는 서비스 요청을 처리하기 위한 백그라운드 프로세스

프로세스 관리 블록 (PCB)

  • 커널에 등록된 각 프로세스에 대한 정보를 저장하는 영역
    • 프로세스들은 모두 커널 공간에 자신의 정보를 가짐

  • PCB에 저장되는 정보
    • PID와 PPID
    • UID와 EUID 및 GID와 EGID
    • 프로세스의 현재 상태
      • 실행/준비/보류/지연 등의 상태 정보와 CPU 사용 시간 등
    • 프로세스 우선순위
    • 프로세스가 사용 중인 자원에 관한 정보
      • 메모리 주소, 입출력 장치, 파일 등
    • 모든 대기 중인 시그널의 목록
    • 문맥 교환 정보

명령의 실행과 프로세스의 생성

  • 셸에서 명령을 실행하면 새로운 프로세스가 만들어져 처리됨
    • 시스템 호출 fork()를 호출하여 기존 부모 프로세스가 자신의 복사본 자식 프로세스를 만듦
    • 자식 프로세스는 시스템 호출 exec(program)에 의해 새로운 프로그램으로 대체되어 실행됨
    • 프로그램이 종료되면 자식 프로세스가 종료됨
    • 부모 프로세스는 보류 상태에 있다가 자식 프로세스가 종료되면서 깨어남


    • 터미날 창에서 ls 명령을 실행하면
    • 셸은 fork()를 호출하여 셸의 복사본(자식 프로세스)를 생성함
    • 자식 프로세스는 exec(ls)를 호출하여 ls 명령을 실행함

  • pstree 명령은 프로세스 트리(부모-자식 관계)를 보여주는 명령

포어그라운드(foreground) 프로세스

  • 셸 프롬프트에서 명령을 실행하면 포어그라운드 모드로 수행됨
    • 포어그라운드 프로세스는 터미날에 대한 제어권을 가짐
    • 포어그라운드 프로세스는 키보드 입력 및 화면 출력이 가능함
    • 터미날로부터 키보드 입력을 받을 수 있는 프로세스는 하나 뿐임
    • 포어그라운드 프로세스가 끝나기 전에는 다른 명령을 수행할 수 없음
  • 포어그라운드로 실행 중인 프로세스를 강제 중지하려면 ctrl+c
  • 포어그라운드로 실행 중에 ctrl+z하면 백그라운드로 전환되며 멈춤(또는 지연) 상태가 됨
    • fg jobld 또는 bg jobld 명령을 수행하면 실행상태가 됨

백그라운드(background) 프로세스

  • 백그라운드로 실행하려면 셸 프롬프트에서 명령의 끝에 &를 추가하여 실행함
    • 백그라운드로 프로세스를 실행시키면 셸은 즉시 명령 대기 상태가 됨
    • 백그라운드 프로세스는 터미날 출력은 가능하나 키보드 입력을 받을 수는 없음
    • 백그라운드 프로세스가 키보드 입력이 필요하면 지연 상태가 됨
    • 입력 없이 장시간 실행되어야 하는 경우 주로 사용
    • 터미날 창을 종료하면 연결된 모든 백그라운드 프로세스도 종료됨
  • 백그라운드 프로세스를 포어그라운드로 전환하는 방법
    • 셸에서 fg jobld을 실행함
  • jobs 명령으로 백그라운드 프로세스의 상태를 점검할 수 있음
    • jobs -l 명령은 PID를 함께 보여줌

Updated: